Vlastnost anonymního typu propertyname<> nelze použít v definici výrazu lambda ve stejném inicializačním seznamu.

Vlastnosti definované v seznamu inicializace anonymního typu nemohou být součástí definice výrazu lambda ve stejném seznamu. Například v následujícím kódu nelze vlastnost Num zahrnout do definice LambdaFun.

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

ID chyby: BC36549

Oprava této chyby

  1. Zvažte rozdělení anonymního typu na dvě části:

    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))
    

    Všimněte si, že pokud deklarujete anon1.Num jako Key vlastnost, její hodnotu nelze změnit.

  2. Alternativou je použití regulárního příkazu funkce pro přístup k vlastnosti anonymního typu:

    Function testNum(ByVal n As Integer) As Boolean
        Return n > 0
    End Function
    Console.WriteLine(testNum(anon1.Num))
    
  3. Podobně můžete použít funkci lambda definovanou mimo anonymní typ:

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

Viz také