是否未执行带函数(x)的VB.NET Linq表达式?
为什么这会像预期的那样起作用:是否未执行带函数(x)的VB.NET Linq表达式?,vb.net,linq,Vb.net,Linq,为什么这会像预期的那样起作用: list.ForEach(sub(x) x.Name = "New Name") 但这不是: list.ForEach(function(x) x.Name = "New Name") 当您使用功能关键字时,是否还有人感到困惑? list.ForEach(Function(x) x.Name = "New Name") 您正在创建一个函数,该函数接受名为x的参数并返回bool(在本例中) 因此,在这种情况下,=不是赋值运算符,而是比较运算符,因此名称属性不会
list.ForEach(sub(x) x.Name = "New Name")
但这不是:
list.ForEach(function(x) x.Name = "New Name")
当您使用
功能
关键字时,是否还有人感到困惑?
list.ForEach(Function(x) x.Name = "New Name")
您正在创建一个函数,该函数接受名为x
的参数并返回bool
(在本例中)
因此,在这种情况下,=
不是赋值运算符,而是比较运算符,因此名称
属性不会更改。
(由于比较运算符,编译器推断函数返回bool
)
相当于
list.ForEach(sub(x) Foobar(x))
...
Function Foobar(x as Foo) As Boolean
Return x.Name = "New Name" 'returns a boolean'
End Function
ForEach将不返回值的操作(Sub)而不是返回值的Func(函数)作为参数
在VB中,=符号是不明确的。它既可以用于比较,也可以用于赋值。因此,为了消除语句的歧义,
x.Name=“New Name”
团队使用指标子项或函数来确定这是比较还是赋值。对于Sub(x)x.Name=“New Name”
,您正在执行赋值,或者将x的Name参数的值设置为“New Name”。在函数(x)x.Name=New“Name”
的情况下,如果x的Name参数与“New Name”相同,则进行比较并返回。因此,在使用Sub和Function时必须小心。请展示一个简短但完整的程序来演示问题。请说明您的期望以及实际发生的情况。请参阅:()您的foobar函数未指定返回值