【问题标题】:List.ForEach in vb.net - perplexing mevb.net 中的 List.ForEach - 让我感到困惑
【发布时间】:2012-01-17 16:11:21
【问题描述】:

考虑以下代码示例:

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

还有这个:

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

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

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

【问题讨论】:

    标签: vb.net foreach generic-list


    【解决方案1】:

    这是因为您使用了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

    【讨论】:

    • 啊,现在说得通了,非常感谢。这对我来说还是很新的:-)
    • 我必须承认,起初我也不知道发生了什么;-)
    • 我对这个东西的强大感到惊讶,强迫自己学习这个也是 LINQ。
    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2010-12-14
    相关资源
    最近更新 更多