2012-05-29 59 views
0

當我運行這段代碼:List.Aggregate意想不到的結果

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 + ","); 

我希望使他能:

a,b,c,d, 

而是s是:

ab,c,d, 

誰能告訴我爲什麼不在第一個和第二個索引之間添加逗號?

感謝

回答

3

你會發現,這個工程

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

你可以看到爲什麼,如果你測試:

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

這將導致 「AB」

使用一個初始的空的種子值(或者(字符串)null或者string.Empty)會給你預期的結果噸。

2

骨料以下過載將工作:

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

基本上,您使用的放版的「一」爲total作爲初始條件的值,然後附加上使用附帶的其餘拉姆達。我的版本開始總計與null,然後追加每個項目。

+0

這據說,我更喜歡菲爾的版本。 –

+0

感謝您的快速響應! – Matt

1

嘗試和作品

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

的問題是:當運行時調用聚合函數功能首次total是「a」和產品「B」。真的這個擴展被設計來執行計算而不是連接字符串。

但是,請注意該得到的字符串是A,B,C,d(沒有結束逗號),我不知道這是最好與否(取決於你的使用結果字符串)

+0

感謝您的快速響應。我實際上在你的代碼中使用了你的方法,但是我覺得我必須把這個複選標記給phil,因爲我原來的問題確實說我期待結果字符串以逗號結尾。 (即使對於我的項目,我實際上並不希望它以逗號結尾) – Matt

+0

@Matt我想象這是你的要求,但我同意你的選擇。不管怎麼說,還是要謝謝你 – Steve