不能在同一个初始化列表中的 lambda 表达式定义中使用匿名类型属性“<属性名称>”
更新:2007 年 11 月
在匿名类型初始化列表中定义的属性不能是同一列表中的 lambda 表达式定义中的一部分。例如,在下面的代码中,属性 Num 不能包含在 LambdaFun 的定义中。
' Not valid.
'Dim anon = New With {.Num = 4, .LambdaFun = Function() .Num > 0}
**错误 ID:**BC36549
更正此错误
请考虑将匿名类型拆分为两部分:
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))
注意,如果将 anon1.Num 声明为 Key 属性,则无法更改其值。
另外一个选择是使用常规函数语句访问匿名类型属性:
Function testNum(ByVal n As Integer) As Boolean Return n > 0 End Function Console.WriteLine(testNum(anon1.Num))
同样,可以使用在匿名类型之外定义的 lambda 函数:
Dim lambdaFun1 = Function() anon1.Num > 0 Dim lambdaFun2 = Function(n As Integer) n > 0