匿名型別屬性 '<propertyname>' 不可用在同一個初始化清單中之 Lambda 運算式的定義內
匿名類型之初始設定清單中所定義的屬性不能是相同清單中 Lambda 運算式定義的一部分。 例如,在下列程式碼中,屬性 Num
不能包括在 LambdaFun
的定義中。
VB
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
錯誤 ID︰ BC36549
請考慮將匿名類型分割成兩個部分:
VBDim 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))
請注意,如果您將
anon1.Num
宣告為Key
屬性,就無法變更其值。替代方法是使用一般函式陳述式來存取匿名類型屬性:
VBFunction testNum(ByVal n As Integer) As Boolean Return n > 0 End Function Console.WriteLine(testNum(anon1.Num))
同樣地,您可以使用在匿名類型外部定義的 Lambda 函式:
VBDim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0