2013-07-25 44 views
1

這是一種非常不雅的方法,它接受一個對象的輸入數組並輸出一個字符串結果,這是ToString()的結果,每個元素都是空格分隔的。C#對象[]以分隔字符串

string Format(object[] args) 
{ 
    var res = string.Empty; 
    foreach (var o in args) 
    { 
     res += o.ToString(); 
     if (o != args.Last()) 
     res += " "; 
    } 
} 

一定有一C#方法隱蔽的地方做這種類型的操作,如果沒有,更優雅的方式來使用LINQ寫?關於我如何編寫此方法的另一個問題是通過逐漸構建字符串來生成垃圾。

+19

您剛剛重新創建了'string.Join' – McGarnagle

+0

@McGarnagle說了些什麼,再加上如果'o'爲空將會翻倒。 –

+0

將你的方法重命名爲Join2 –

回答

12
var res = String.Join(" ", args); 
3
var res = String.Join(" ", args.Select(x=> x != null ? x.ToString() : "")); 

將共同每個項目的字符串表示。

+3

不需要額外的空檢查,String.Join已經處理它。 – I4V

+0

我打電話給'ToString()'。一個空值將導致一個'NullReferenceException' – Amy

+0

但是String.Join已經使用'.ToString()' – I4V

1

您可以使用我傾向於喜歡的聚合方法。

args.Where(x => x != null).Aggregate((c, n) => c.ToString() + " " + n.ToString()); 
+0

@ I4V well obv你在索引2上得到一個空引用異常。'args.Where(x => x!= null).Aggregate(...)'雖然很容易解決這個問題。 – evanmcdonnal