你能在字典上使用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.names
是Dictionary<string,int>
,我想知道是否有一种方法可以在不损失任何效率的情况下(通过中间转换或其他方式)使其更加紧凑。我能做一些类似的事情吗
this.Names.ForEach(f => Console.WriteLine("{0} ({1})", f.Key, f.Value));
您可以编写一个自定义扩展方法:
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]));
这肯定更简洁,但不确定这是否是你想要的。