Properti jenis anonim '<propertyname>' tidak dapat digunakan pada definisi ekspresi lambda dalam daftar inisialisasi yang sama

Properti yang ditentukan dalam daftar inisialisasi jenis anonim tidak dapat menjadi bagian dari definisi ekspresi lambda dalam daftar yang sama. Misalnya, dalam kode berikut, properti Num tidak dapat disertakan dalam definisi LambdaFun.

' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}

ID Kesalahan: BC36549

Untuk memperbaiki kesalahan ini

  1. Pertimbangkan untuk membagi jenis anonim menjadi dua bagian:

    Dim anon1 = New With {.Num = 4}
    Dim anon2 = New With {.LambdaFun = Function() anon1.Num > 0}
    ' - or -
    Dim anon3 = New With {.lambdaFun = Function(n As Integer) n > 0}
    Console.WriteLine((anon2.LambdaFun)())
    Console.WriteLine(anon3.lambdaFun(anon1.Num))
    anon1.Num = -5
    Console.WriteLine((anon2.LambdaFun)())
    Console.WriteLine(anon3.lambdaFun(anon1.Num))
    

    Perhatikan bahwa jika Anda menyatakan anon1.Num sebagai properti Key, nilainya tidak dapat diubah.

  2. Alternatifnya adalah menggunakan pernyataan fungsi reguler untuk mengakses properti jenis anonim:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Demikian pula, Anda dapat menggunakan fungsi lambda yang didefinisikan di luar jenis anonim:

    Dim lambdaFun1 = Function() anon1.Num > 0
    Dim lambdaFun2 = Function(n As Integer) n > 0
    

Lihat juga