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

发布于 2024-07-24 04:30:21 字数 276 浏览 9 评论 0原文

如何使用 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?

How do I alter the contents of an IDictionary using C# 3.0 (Linq, Linq extensions) ?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

温柔少女心 2024-07-31 04:30:22

这并不像其他方法那么清楚,但它应该可以正常工作:

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);

但这在这种情况下不起作用,因为 Value不能分配给。

This is not nearly as clear as other ways, but it should work fine:

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

My other alternative would have been to make a ForEach extension method similar to this:

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

Then use it like this:

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

This won't work in this case though, as Value cannot be assigned to.

旧人九事 2024-07-31 04:30:22

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

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

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

LINQ is a query dialect - it isn't directly a mutation language.

To change the values of an existing dictionary, foreach is probably your friend:

foreach(int key in dictionary.Keys) {
    dictionary[key] = 1;
}
垂暮老矣 2024-07-31 04:30:22
foreach (var item in dictionary.Keys)
    dictionary[item] = 1;

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

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

I wonder why you might a need doing such a thing, though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文