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

Gra*_*use 24 vb.net foreach generic-list

请考虑以下代码示例:

    TempList.ForEach(Function(obj)
        obj.Deleted = True
    End Function)
Run Code Online (Sandbox Code Playgroud)

还有这个:

    TempList.ForEach(Function(obj) obj.Deleted = True)
Run Code Online (Sandbox Code Playgroud)

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

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

Met*_*ght 53

这是因为你用Function而不是Sub.由于a Function返回一个值,编译器认为等号(=)用作比较,而不是赋值.如果更改FunctionSub,编译器会正确地将等号视为赋值:

TempList.ForEach(Sub(obj) obj.Deleted = True)
Run Code Online (Sandbox Code Playgroud)

如果你有一个多线lambda; 你不会有这个问题:

TempList.ForEach(Function(obj)
                     obj.Deleted = True
                     Return True
                 End Function)
Run Code Online (Sandbox Code Playgroud)

显然,对于ForEach方法,使用a是没有意义的,Function因为不会使用返回值,所以你应该使用a Sub.