11

私はC#の初心者です。私はこのような辞書を持っています:

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

この行を形成したい:

tom = student, rob = teacher, david = lawyer

Aggregate 拡張メソッドを使用したいのですdictionary<>が、次のようにすると:

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

このエラーが発生します:

ラムダ式をデリゲート型に変換できません。

だから私はそれを間違っているようです。では、この方法の使い方を誰か教えてもらえますか?

4

1 に答える 1

21

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

説明:

  • 最初のパラメータはアキュムレータで、結果を蓄積します
  • 2 番目のパラメーターは、各ディクショナリ要素で呼び出される関数です。この関数は、アキュムレータにデータを追加します。
  • 最後のパラメータは、アキュムレータから結果文字列を構築します

ちなみに、次のコードを使用して必要な文字列を作成できます。

String.Join(", ", dic.Select(kvp => kvp.Key + " = " + kvp.Value));          
于 2012-12-25T19:56:34.443 に答える