C# 有没有办法在字典内容上使用.ForEach?

C# 有没有办法在字典内容上使用.ForEach?,c#,.net,C#,.net,我将一个集合从List更改为Dictionary,似乎我需要在其上使用.ForEach()更改为ForEach()——无论我是在迭代字典本身还是Dictionary.Values 这没什么大不了的,但我已经看到过好几次当你可以和不能使用LINQ的时候会有细微的差异,我想知道是否有办法,但我错过了它?不幸的是。ForEach()只在列表中定义 您可以先使用.ToList()来访问.ForEach,但与仅使用ForEach相比,这当然会降低性能,或者您可以为此创建扩展方法: public stati

我将一个集合从
List
更改为
Dictionary
,似乎我需要在其上使用
.ForEach()
更改为
ForEach()
——无论我是在迭代字典本身还是
Dictionary.Values


这没什么大不了的,但我已经看到过好几次当你可以和不能使用LINQ的时候会有细微的差异,我想知道是否有办法,但我错过了它?

不幸的是
。ForEach()
只在
列表中定义

您可以先使用
.ToList()
来访问
.ForEach
,但与仅使用
ForEach
相比,这当然会降低性能,或者您可以为此创建扩展方法:

public static void ForEach<T, U>(this Dictionary<T, U> d, Action<KeyValuePair<T, U>> a)
{
    foreach (KeyValuePair<T, U> p in d) { a(p); }
}

public static void ForEach<T, U>(this Dictionary<T, U>.KeyCollection k, Action<T> a)
{
    foreach (T t in k) { a(t); }
}

public static void ForEach<T, U>(this Dictionary<T, U>.ValueCollection v, Action<U> a)
{
    foreach (U u in v) { a(u); }
}
publicstaticvoidforeach(此字典d,动作a)
{
foreach(KeyValuePair p in d){a(p);}
}
公共静态void ForEach(此Dictionary.KeyCollection k,操作a)
{
foreach(T在k中){a(T);}
}
公共静态void ForEach(此Dictionary.ValueCollection v,操作a)
{
foreach(U在v中){a(U);}
}

如果您对进一步的信息感兴趣,那么已经有一个类似的例子了

不幸的是,
.ForEach()
仅在
列表
类中定义

您可以先使用
.ToList()
来访问
.ForEach
,但与仅使用
ForEach
相比,这当然会降低性能,或者您可以为此创建扩展方法:

public static void ForEach<T, U>(this Dictionary<T, U> d, Action<KeyValuePair<T, U>> a)
{
    foreach (KeyValuePair<T, U> p in d) { a(p); }
}

public static void ForEach<T, U>(this Dictionary<T, U>.KeyCollection k, Action<T> a)
{
    foreach (T t in k) { a(t); }
}

public static void ForEach<T, U>(this Dictionary<T, U>.ValueCollection v, Action<U> a)
{
    foreach (U u in v) { a(u); }
}
publicstaticvoidforeach(此字典d,动作a)
{
foreach(KeyValuePair p in d){a(p);}
}
公共静态void ForEach(此Dictionary.KeyCollection k,操作a)
{
foreach(T在k中){a(T);}
}
公共静态void ForEach(此Dictionary.ValueCollection v,操作a)
{
foreach(U在v中){a(U);}
}

如果您对进一步的信息感兴趣,那么已经有一个类似的例子了

字典是可枚举的,所以你所要做的就是dict.Select()或dict.Where()
。ForEach
实际上是一个
列表
而不是
IEnumerable
,所以为什么它不适用于
字典
而不适用于Linq。这里还有一个问题:是的,我想知道
是什么。。。我认为这可能最终是一个
列表
,但显然不是。我想知道是否有一个很好的技术原因,或者仅仅“因为”?@Mr.Boy LINQ是一种声明性方法,它不修改源集合,而是以一种懒惰的方式过滤/映射。ForEach有点相反。。。事实上,
Select(x=>action(x)).All()
大致相当于
.ForEach
,但这确实令人困惑,如果您需要非惰性执行,常规的
ForEach
将更加自我记录。字典是可枚举的,所以您只需执行dict.Select()或dict.Where()
.ForEach
实际上是一个
列表
而不是
IEnumerable
,因此为什么它不适用于
字典
而不适用于Linq。另请参见这里的问题:是的,我想知道
是什么。。。我认为这可能最终是一个
列表
,但显然不是。我想知道是否有一个很好的技术原因,或者仅仅“因为”?@Mr.Boy LINQ是一种声明性方法,它不修改源集合,而是以一种懒惰的方式过滤/映射。ForEach有点相反。。。实际上,
Select(x=>action(x)).All()
大致相当于
。ForEach
但这确实令人困惑,如果您需要非惰性执行,常规的
ForEach
将更加自我记录。我的意思是,实际上这似乎不值得。我能写一个循环,有时候你会觉得它们有点脏,有点过时;)我同意你说的我的意思是,在现实中,这似乎不值得。我能写一个循环,有时候你会觉得它们有点脏,有点过时;)我同意你说的