我如何消除'=';VB.NET中lambda函数中的符号
我使用Dapper从数据库中查询项目的平面列表,并将其放入POCO类中,如下所示:我如何消除'=';VB.NET中lambda函数中的符号,vb.net,Vb.net,我使用Dapper从数据库中查询项目的平面列表,并将其放入POCO类中,如下所示: Public Class Node Public Property Name As String Public Property ParentNodeName As String Public Property Children As IEnumerable(Of Node) End Class 我试图使用公认的答案,以便从平面列表中创建一个树 唯一需要注意的是,我使用的是VB.NET
Public Class Node
Public Property Name As String
Public Property ParentNodeName As String
Public Property Children As IEnumerable(Of Node)
End Class
我试图使用公认的答案,以便从平面列表中创建一个树
唯一需要注意的是,我使用的是VB.NET
我尝试了C#解决方案的简单端口:
nodes.ForEach(Function(n) n.Children = nodes.Where(Function(ch) ch.ParentNodeName = n.Name).ToList)
但它不会编译时出错
Error BC30452 Operator '=' is not defined for types 'List(Of Node)' and 'List(Of Node)'.
=
符号被解释为相等运算符,而我的意思是使用赋值运算符
我已将C#代码粘贴到telerik转换器中,转换后的代码为:
Private Shared Function BuildTree(ByVal items As List(Of Category)) As IEnumerable(Of Category)
items.ForEach(Function(i) CSharpImpl.__Assign(i.Categories, items.Where(Function(ch) ch.ParentId = i.Id).ToList()))
Return items.Where(Function(i) i.ParentId Is Nothing).ToList()
End Function
Private Class CSharpImpl
<Obsolete("Please refactor calling code to use normal Visual Basic assignment")>
Shared Function __Assign(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
私有共享函数BuildTree(ByVal项作为列表(属于类别))作为IEnumerable(属于类别)
items.ForEach(函数(i)csharpumpl.\u赋值(i.Categories,items.Where(函数(ch)ch.ParentId=i.Id).ToList())
Return items.Where(Function(i)i.ParentId为Nothing).ToList()
端函数
私有类CSharpImpl
共享函数uu分配(Of T)(ByRef目标为T,值为T)为T
目标=价值
返回值
端函数
末级
它使用了一个helper类来解决这个问题,但建议进行重构来避免这个问题
因此,问题是:
- 在VB.NET中,是否有一种通用的方法来消除
和相等=
之间的歧义,而无需求助于助手类和特定函数来赋值赋值=
- 在这种情况下,有没有一个简单的重构方法可以用来解决这个问题?
- 这是因为VB.Net在函数和子例程之间的区别
而不是
nodes.ForEach(Function(n) n.Children = nodes.Where(Function(ch) ch.ParentNodeName = n.Name).ToList)
使用
使用函数
时,lambda表达式应返回一个值;在您的例子中,它看起来想要返回一个布尔值
但是如果要使用不返回任何内容的lambda表达式(在您的情况下,您需要赋值),则必须使用
Sub
,这是因为VB.Net在函数和子例程之间存在区别
而不是
nodes.ForEach(Function(n) n.Children = nodes.Where(Function(ch) ch.ParentNodeName = n.Name).ToList)
使用
使用函数
时,lambda表达式应返回一个值;在您的例子中,它看起来想要返回一个布尔值
但是如果要使用不返回任何内容的lambda表达式(在本例中,您需要赋值),则必须使用
Sub
使用返回ch.ParentNodeName=n.Name
来解决歧义。使用返回ch.ParentNodeName=n.Name
来解决歧义。这部分是因为在VB中,赋值是一个语句,而不是一个表达式(与C语言不同)。因此,如果在表达式上下文中使用=
,它必然会被解释为相等比较运算符,因为它不能是赋值。这部分是因为在VB中,赋值是语句,而不是表达式(与C语言不同)。因此,如果在表达式上下文中使用=
,它必然会被解释为相等比较运算符,因为它不能是赋值。