如何使用LINQ(C#3.0)更改IDictionary的内容

时间:2009-06-04 20:49:41

标签: c# .net linq c#-3.0 idictionary

如何使用C#3.0(Linq,Linq扩展)更改IDictionary的内容?

var enumerable = new int [] { 1, 2};
var dictionary = enumerable.ToDictionary(a=>a,a=>0);
//some code
//now I want to change all values to 1 without recreating the dictionary
//how it is done?

3 个答案:

答案 0 :(得分:4)

LINQ是一种查询方言 - 它不是直接的变异语言。

要更改现有字典的值,foreach可能是您的朋友:

foreach(int key in dictionary.Keys) {
    dictionary[key] = 1;
}

答案 1 :(得分:4)

这并不像其他方式那样清晰,但它应该可以正常工作:

dictionary.Keys.ToList().ForEach(i => dictionary[i] = 0);

我的另一种选择是制作类似于此的ForEach扩展方法:

public static class MyExtensions
{
    public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
    {
        foreach (var item in items)
        {
            action(item);
        }
    }
}

然后像这样使用它:

dictionary.ForEach(kvp => kvp.Value = 0);

但在这种情况下,这不起作用,因为无法将值分配给。

答案 2 :(得分:2)

foreach (var item in dictionary.Keys)
    dictionary[item] = 1;

我想知道为什么你可能需要做这样的事情。