VB.NET是否在现有对象上使用关键字?
是否有可能在现有对象上使用“With”关键字 我想使用LINQ to对象执行以下操作,但似乎找不到方法:VB.NET是否在现有对象上使用关键字?,vb.net,linq-to-objects,with-statement,Vb.net,Linq To Objects,With Statement,是否有可能在现有对象上使用“With”关键字 我想使用LINQ to对象执行以下操作,但似乎找不到方法: From m as Product in Me _ Select m With {.Match = m.Name.IndexOf(query)} _ Where m.Name.IndexOf(query) > 0 不可以。问题是With关键字(对象初始化关键字,而不是语句)只能在创建新对象后使用 在现有对象上使用和的副作用太令人困惑了 关于您的问题:如果Match还不是Pr
From m as Product in Me _
Select m With {.Match = m.Name.IndexOf(query)} _
Where m.Name.IndexOf(query) > 0
不可以。问题是
With
关键字(对象初始化关键字,而不是语句)只能在创建新对象后使用
在现有对象上使用和的副作用太令人困惑了
关于您的问题:如果Match
还不是Product
的属性,最干净的解决方案可能是将所需的输出封装到新对象中:
From m as Product in Me _
Select New With {.Match = m.Name.IndexOf(query), .Product = m} _
Where m.Name.IndexOf(query) > 0
不,这是没有办法的(With
只能与构造函数一起使用)。这将违反linq构建的功能原则,特别是不会产生副作用
最好的选择是使用“匹配”属性集在select中创建新产品
From m as Product in Me _
Where m.Name.IndexOf(query) > 0 _
Select New Product() With _
{ _
.Match = m.Name.IndexOf(query), _
...apply the rest of m's properties _
}
使用接受lambda的System.Object
上的扩展方法,您可以相当接近地模拟此类功能,但它是用C#写的。翻译成VB.NET可能不太难。在VB.NET中,关键字和有两种用法
第一个是对象初始化。它是一种在初始化表达式的同一行中指定对象的属性或字段的方法,而不需要为字段的每个排列指定特定的构造函数
Dim x = New Product With {.Name = "Foo"}
这种类型的表达式只能用于创建新对象。它不能用于修改现有的
第二个用法是With
语句。这允许您将一个对象放到上下文中,可以说,并调用多个对象。在没有资格的情况下对其进行操作
With x
Console.WriteLine(.Name)
.Match = 42
End With
但这两种方法都不允许将现有对象用作创建新对象的模板 你读过那篇文章吗?在我看来,他们似乎强烈反对这个想法。这正是我需要实现的!谢谢