Sabit ifade gerekiyor

Deyim Const bir sabiti düzgün başlatmaz, dizi bildirimi öğe sayısını belirtmek için bir değişken kullanır veya isteğe bağlı bir parametre için varsayılan değer olarak bir dizi başlatmaya çalışıyorsunuz.

Hata Kimliği: BC30059

Bu hatayı düzeltmek için

  • Bildirim bir Const deyimse sabitin bir değişmez değer, daha önce bildirilen bir sabit, bir sabit listesi üyesi veya işleçlerle birleştirilmiş sabitler, sabitler ve sabit listesi üyeleri birleşimiyle başlatıldığından emin olun.

  • Bildirim bir dizi belirtiyorsa, öğe sayısını belirtmek için bir değişkenin kullanılıp kullanılmadığını denetleyin. Bu durumda değişkenini sabit bir ifadeyle değiştirin.

  • İsteğe bağlı bir parametre için varsayılan değer olarak bir dizi başlatmaya çalışıyorsanız, isteğe bağlı parametreler bölümünde Dizi başlatma bölümünde açıklanan alternatif yaklaşımlardan birini kullanın.

  • Yukarıdaki denetimler sorunu çözmezse, öğesini farklı bir geçici değere ayarlamayı Const , programı çalıştırmayı ve ardından istenen değere sıfırlamayı Const deneyin.

İsteğe bağlı parametrelerde dizi başlatma

Dizi başlatma sabit bir ifade olmadığından, isteğe bağlı parametre için bir diziyi varsayılan değer olarak başlatamazsınız. Aşağıdaki kod BC30059 oluşturur:

' This causes BC30059
Public Function MyFun(Optional filters() As (String, String) = New (String, String)() {}) As Boolean
    ' Function body
End Function

Çözüm 1: İsteğe Bağlı yerine ParamArray kullanın

Değişken sayıda bağımsız değişken kabul etmeniz gerekiyorsa isteğe bağlı bir parametre yerine kullanmayı ParamArray göz önünde bulundurun:

Public Function MyFun(ParamArray filters() As (String, String)) As Boolean
    ' The ParamArray automatically provides an empty array if no arguments are passed
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

' Can be called with any number of arguments:
MyFun() ' Empty array
MyFun(("name", "value"))
MyFun(("name1", "value1"), ("name2", "value2"))

Çözüm 2: Hiçbir şeyi varsayılan olarak kullanma ve yöntem gövdesinde başlatma

Varsayılan değeri olarak ayarlayın ve yönteminizde bu değeri Nothing denetleyin:

Public Function MyFun(Optional filters() As (String, String) = Nothing) As Boolean
    If filters Is Nothing Then
        filters = New (String, String)() {}
    End If
    
    ' Process the filters array
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

' Can be called without arguments:
MyFun() ' Uses empty array
' Or with an array:
MyFun({("name", "value")})

Çözüm 3: Parametresiz bir aşırı yükleme sağlayın

yönteminin parametresini gerektirmeyen aşırı yüklenmiş bir sürümünü oluşturun:

' Overload without the parameter
Public Function MyFun() As Boolean
    Return MyFun(New (String, String)() {})
End Function

' Main method with required parameter
Public Function MyFun(filters() As (String, String)) As Boolean
    ' Process the filters array
    For Each filter In filters
        ' Process each filter
    Next
    Return True
End Function

Ayrıca bakınız