如何使用Linq迭代字典的键并为字典中的每个键执行一个方法?

时间:2013-11-11 20:57:16

标签: .net linq

如何修复此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

我知道我错过了一些东西,因为以这种方式选择扩展不是解决方案......但是,我不知道。

3 个答案:

答案 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肯定更合适。