0

このコードを実行すると:

List<string> list = new List<string>();
list.Add("a");
list.Add("b");
list.Add("c");
list.Add("d");

string s = list.Aggregate((total, item) => total += item + ",");

私はsが次のようになることを期待しています:

a,b,c,d,

代わりに、s は次のとおりです。

ab,c,d,

最初のインデックスと 2 番目のインデックスの間にコンマを追加しない理由を誰か教えてもらえますか?

ありがとう

4

3 に答える 3

3

これが機能することがわかります

string s = list.Aggregate(string.Empty, (total, item) => total += item + ",");

これをテストすると、その理由がわかります。

var total = "a";
var item = "b";
var s = total += item + ",";

これにより、「ab」が生成されます。

合計に最初の空のシード値 ((string)null または string.Empty のいずれか) を使用すると、期待どおりの結果が得られます。

于 2012-05-29T20:22:36.003 に答える
2

Aggregate の次のオーバーロードが機能します。

string s = list.Aggregate<string, string>(null, (total, item) => total + item + ",");

基本的に、使用しているバージョンはtotal、初期条件としての値として「a」を配置し、提供されたラムダを使用して残りを追加します。私のバージョンでは、合計を で開始しnull、次に各項目を追加します。

于 2012-05-29T20:23:24.880 に答える
1

試してみて動作します

string s = list.Aggregate((total, item) => total += "," + item); 

問題は: ランタイムが最初に Aggregate Func を呼び出すときtotalは "a" で item は "b" です。実際、この拡張機能は、文字列を連結しない計算を実行するように設計されています。

ただし、結果の文字列が a,b,c,d (末尾のコンマなし) であることに注意してください。これが望ましいかどうかはわかりません (結果の文字列の使用方法によって異なります)。

于 2012-05-29T20:24:08.263 に答える