vb.net中的List.ForEach - 令我困惑

时间:2012-01-17 16:11:21

标签: vb.net foreach generic-list

请考虑以下代码示例:

    TempList.ForEach(Function(obj)
        obj.Deleted = True
    End Function)

这一个:

    TempList.ForEach(Function(obj) obj.Deleted = True)

我希望结果是相同的,但是第二个代码示例不会更改列表TempList中的对象。

这篇帖子更能理解为什么......?或至少得到一些帮助,了解为什么......

1 个答案:

答案 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