你能在字典上使用ForEach吗

本文关键字:ForEach 字典 | 更新日期: 2023-09-27 18:22:12

我有很多像这样的代码块

        foreach ( KeyValuePair<string, int> thisFriend in this.names )
        {
            Console.WriteLine("{0} ({1})", thisFriend.Key, thisFriend.Value);
        }

其中this.namesDictionary<string,int>,我想知道是否有一种方法可以在不损失任何效率的情况下(通过中间转换或其他方式)使其更加紧凑。我能做一些类似的事情吗

this.Names.ForEach(f => Console.WriteLine("{0} ({1})", f.Key, f.Value));

你能在字典上使用ForEach吗

您可以编写一个自定义扩展方法:

public static class DictionaryExtensions
{
    public static void ForEach<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, Action<TKey, TValue> action)
    {
        foreach (var pair in dictionary)
        {
            action(pair.Key, pair.Value);
        }
    }
}
// ...
d.ForEach((s, s1) =>
{
    Console.WriteLine($"{s} ({s1})");
});

甚至是使用CCD_ 3的更通用的。

然而,在我看来,这并没有带来任何改善。有3行代码,没有办法缩短代码。使用CCD_ 4方便、可读。您可以停止显式定义类型。使用var——它不会降低可读性,但节省了大量时间:

foreach ( var thisFriend in this.names )
{
    Console.WriteLine($"{thisFriend.Key} ({thisFriend.Value})");
}

您可以枚举密钥集合(但必须先将KeysCollecton转换为列表)

this.Names.Keys.ToList().ForEach(k => Console.WriteLine("{0}:{1}", k, this.Names[k]));

这肯定更简洁,但不确定这是否是你想要的。