如何使用Dictionary<>的聚合方法在C#?

时间:2012-12-25 19:46:08

标签: c# dictionary delegates lambda aggregate

我是C#的初学者。我有这样的字典:

{
  {"tom", "student"},
  {"rob", "teacher"},
  {"david", "lawyer"}
}

我想形成这一行:

tom = student, rob = teacher, david = lawyer

我想使用dictionary<>的聚合扩展方法,但当我这样做时:

Console.WriteLine(dic.Aggregate((a,b) => (a.Key + " = " + a.Value + ", " + b.Key + " = " + b.Value)));

我收到此错误:

  

无法将lambda表达式转换为委托类型。

所以看来我做错了。那么有人能告诉我如何使用这种方法吗?

1 个答案:

答案 0 :(得分:16)

Aggregate不是Dictionary的方法,它是IEnumerable<T>的扩展方法。如果要构建聚合字符串:

dic.Aggregate(new StringBuilder(),
              (sb, kvp) => sb.AppendFormat("{0}{1} = {2}", 
                           sb.Length > 0 ? ", " : "", kvp.Key, kvp.Value),
              sb => sb.ToString());

说明:

  • 第一个参数是累加器,它将累积结果
  • 第二个参数是一个函数,将在每个字典元素上调用。此函数将数据附加到累加器。
  • 最后一个参数从累加器构建结果字符串

顺便说一句,您可以使用以下代码来构建所需的字符串:

String.Join(", ", dic.Select(kvp => kvp.Key + " = " + kvp.Value));