为什么按预期工作:
list.ForEach(sub(x) x.Name = "New Name")
但这不是:
list.ForEach(function(x) x.Name = "New Name")
还有人困惑吗?
当您使用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
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 时必须小心。