如何修复此LINQ扩展? (无论是C#还是VB):
States.Select(Function(item) myMethod(item.Key, item.Value))
States
对象是一个字典,我试图使用LINQ重现的内容与此相同:
For each item in states
myMethod(item.Key, item.Value)
Next item
我知道我错过了一些东西,因为以这种方式选择扩展不是解决方案......但是,我不知道。
答案 0 :(得分:2)
我认为你的意思是ForEach扩展,你可以像这样使用它
States.ToList().ForEach(Function(item) myMethod(item.Key, item.Value))
答案 1 :(得分:1)
从你的例子中,没有办法在linq中“重现”这个。该函数不返回值。如果myMethod()返回了一些内容,你可以创建一个包含所有结果的列表(C#)
var resultlist = States.Select(item => myMethod(item.Key,item.Value));
但如果方法没有返回值,则没有理由使用linq - 只需像原先一样使用for。
答案 2 :(得分:1)
Linq用于查询 - 它旨在迭代一个集合,返回每个项目的结果。有ForEach
个扩展方法只包含foreach
,但在我看来(and others')它们毫无意义,因为它们只是更改语法,他们不改进它。
你可以通过返回虚拟值
来在C#中伪造它States.Select(item => {myMethod(item.Key, item.Value); return 0;})
或在VB中:
States.Select(Function(item)
myMethod(item.Key, item.Value)
Return 1
End Function)
但我认为只会增加令人困惑的噪音 - foreach
肯定更合适。