Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Anonymous type property '<propertyname>' cannot be used in the definition of a lambda expression within the same initialization list
Le proprietà definite nell'elenco di inizializzazione di tipo anonimo non possono far parte di una definizione di un'espressione lambda nello stesso elenco. Ad esempio, nel codice seguente, la proprietà Num non può essere inclusa nella definizione dell'oggetto LambdaFun.
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
ID errore: BC36549
Per correggere l'errore
Si consideri di suddividere il tipo anonimo in due parti:
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))Notare che se si dichiara l'oggetto anon1.Num come una proprietà Key, non è possibile modificarne il valore.
In alternativa è possibile utilizzare un'istruzione Function normale per accedere alla proprietà di tipo anonimo:
Function testNum(ByVal n As Integer) As Boolean Return n > 0 End Function Console.WriteLine(testNum(anon1.Num))Allo stesso modo, è possibile utilizzare una funzione lambda definita al di fuori del tipo anonimo:
Dim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0