VB.NET:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;语句lambda无法转换为表达式树;编译时错误
为何我可以这样做:VB.NET:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;语句lambda无法转换为表达式树;编译时错误,.net,vb.net,lambda,.net,Vb.net,Lambda,为何我可以这样做: Dim qNodes As IQueryable(Of XmlNode) = xDoc.ChildNodes.AsQueryable() Dim test = qNodes.Where(Function(node) True) 尽管以下给出了我在标题中所述的错误: Dim qNodes As IQueryable(Of XmlNode) = xDoc.ChildNodes.AsQueryable() Dim test = qNodes.Where(Function(node
Dim qNodes As IQueryable(Of XmlNode) = xDoc.ChildNodes.AsQueryable()
Dim test = qNodes.Where(Function(node) True)
尽管以下给出了我在标题中所述的错误:
Dim qNodes As IQueryable(Of XmlNode) = xDoc.ChildNodes.AsQueryable()
Dim test = qNodes.Where(Function(node)
Return True
End Function)
?
我真的不明白。VB.Net支持两种lambda表达式:
- 表达式lambda包含单个表达式并隐式返回该表达式。
例如:Function(x)x.ToString()
- 语句lambda包含一个或多个语句,必须显式使用
关键字(如果它们返回值)Return
这些是VB.Net 2010的新增功能。
例如:Sub(x) Logger.Log(x) Console.WriteLine(x) End Sub
Where
方法以及所有其他IQueryable
方法都采用。编译器可以自动将表达式lambdas(而不是语句lambdas)编译到表达式树中
第二个示例尝试将语句lambda作为
表达式(Of Func(Of T,Boolean))
传递,但编译器无法这样做。这在VB.NET 10语言规范的第11.1节中有说明:
lambda和lambda之间的精确转换
方法和表达式树可能不可用
在不同版本的
编译器的范围之外
本规范。对于微软
Visual Basic 10.0,所有lambda
表达式可以转换为
表达式树受
以下限制: