5

为什么按预期工作:

list.ForEach(sub(x) x.Name = "New Name")

但这不是:

list.ForEach(function(x) x.Name = "New Name")

还有人困惑吗?

4

2 回答 2

6

当您使用Function关键字时

list.ForEach(Function(x) x.Name = "New Name")

您正在创建一个函数,该函数接受一个名为x并返回 a的参数bool(在这种情况下)。

所以,在这种情况下,=不是赋值运算符,而是比较运算符,因此Name属性没有改变。(编译器推断该函数bool由于比较运算符而返回 a)

相当于

list.ForEach(sub(x) Foobar(x))

...

Function Foobar(x as Foo) As Boolean
    Return x.Name = "New Name" 'returns a boolean'
End Function
于 2012-09-04T13:54:57.207 回答
3

List(Of T).ForEach 将不返回值的 Action (Sub) 作为参数,而不是返回值的 Func (Function)。

在 VB 中,= 符号是不明确的。它可以用于比较或赋值。作为消除语句歧义的结果,x.Name = "New Name"团队使用指示符 Sub 或 Function 来确定这是比较还是赋值。在 的情况下Sub(x) x.Name = "New Name",您正在执行赋值,或者将 x 的 Name 参数的值设置为“新名称”。如果Function(x) x.Name = New "Name"您正在进行比较并返回 x 的 Name 参数是否与“新名称”相同。因此,在使用 Sub 和 Function 时必须小心。

于 2012-09-04T20:00:08.610 回答