请考虑以下代码示例:
TempList.ForEach(Function(obj)
obj.Deleted = True
End Function)
这一个:
TempList.ForEach(Function(obj) obj.Deleted = True)
我希望结果是相同的,但是第二个代码示例不会更改列表TempList中的对象。
这篇帖子更能理解为什么......?或至少得到一些帮助,了解为什么......
答案 0 :(得分:48)
这是因为您使用了Function
而不是Sub
。由于Function
返回一个值,编译器认为等号(=)用作比较,而不是赋值。如果您将Function
更改为Sub
,编译器会正确地将等号视为作业:
TempList.ForEach(Sub(obj) obj.Deleted = True)
如果你有多线lambda;你不会遇到这个问题:
TempList.ForEach(Function(obj)
obj.Deleted = True
Return True
End Function)
显然,对于ForEach方法,使用Function
是没有意义的,因为不会使用返回值,所以你应该使用Sub
。