0

我该如何修复这个 LINQ 扩展?(无论在 C# 还是 VB 中):

States.Select(Function(item) myMethod(item.Key, item.Value))

Statesobject 是一个字典,我试图使用 LINQ 重现的内容与此相同:

For each item in states
    myMethod(item.Key, item.Value)
Next item

我知道我遗漏了一些东西,因为这样的 Select 扩展不是解决方案……但是,我不知道。

4

3 回答 3

2

我想你的意思是 ForEach 扩展,你可以像这样使用它

States.ToList().ForEach(Function(item) myMethod(item.Key, item.Value))
于 2013-11-11T21:07:12.870 回答
1

从您的示例中,无法在 linq 中“重现”此内容。该函数不返回值。如果 myMethod() 返回了一些东西,你可以创建一个这样的所有结果列表(C#)

var resultlist = States.Select(item => myMethod(item.Key,item.Value));

但是,如果方法不返回值,则没有理由使用 linq —— 只需像最初一样使用 for each 。

于 2013-11-11T21:02:22.727 回答
1

Linq 用于查询- 它旨在遍历集合并为每个项目返回结果。有一些ForEach扩展方法只是 wrap foreach,但在我看来( 其他人的)它们是毫无意义的,因为它们只会改变语法,不会改进它。

可以在 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)

但我认为这只会增加令人困惑的噪音 - aforeach绝对更合适。

于 2013-11-11T21:10:13.800 回答