2013-01-02 58 views

回答

18

,可以幫助出另一種方法是string.Join,這需要一組對象,並會加入他們你想要的任何分隔符。例如:

var combined = string.Join(", ", myObjects); 

將產生一個逗號/空格分隔的字符串。

+0

試過這個,由於對象不是字符串而被編譯器拒絕。文檔似乎說這不會起作用,需要字符串,而不是對象? https://msdn.microsoft.com/en-us/library/57a79xd0%28v=vs.110%29.aspx – Adam

+2

原始問題提到對象實現'ToString()'。所以,你必須爲輸入類添加'ToString()'功能(如果可以的話),或者你可以使用linq將對象投影到'string's,la'string.Join(「, 「,myObjects.Select(a => MyStringMethod(a)));'。 – eouw0o83hf

+0

此外,[該文檔確實顯示過載](https://msdn.microsoft.com/en-us/library/dd988350(v = vs.110).aspx),它在第二個對象中使用Object [] ARG。所以,假設'myObjects'是一個數組,它可以用於直接使用'Object's – eouw0o83hf

10

假設你的意思是你的對象實施的ToString,我相信這將做到這一點:

String.Concat(objects.Select(o=>o.ToString())); 

按DTB注意,這應該工作以及:

String.Concat(objects); 

http://msdn.microsoft.com/en-us/library/dd991828.aspx

當然,如果你沒有實現ToString,你也可以這樣做:

String.Concat(objects.Select(o=>o.FirstName + " " + o.LastName)); 
+0

太棒了,這個作品! – user1306322

+5

'.Select(o => o.ToString())'是不必要的,因爲[String.Concat方法](http://msdn.microsoft.com/zh-cn/library/dd991828.aspx)有一個過載它接受IEnumerable 並將'.ToString'應用於每個項目。該方法還適當地處理您的解決方案沒有的'null'值。 – dtb

4

您可以使用String.Join連接對象列表。

string str = String.Join(",", objects); 
+0

'.Cast ()'如果對象還不是一個字符串,它就會工作。而'.ToArray()'是不必要的,因爲String.Join方法接受IEnumerable 。 – dtb

+0

'.Select(c => c.ToString())'是不必要的,因爲[String.Join方法](http://msdn.microsoft.com/zh-cn/library/dd992421.aspx)有一個過載它接受IEnumerable 並將'.ToString'應用於每個項目。該方法還適當地處理您的解決方案沒有的'null'值。 – dtb

+0

你是對的dtb,更新了我的答案。 – Adil

1

這些都不適合我。我很困惑,因爲文檔明確說他們不會工作(需要字符串,而不是對象)。但是,修改@阿迪爾的原始答案(通過看以前的版本中找到),我得到了正常工作的一個版本:

string.Join(",", objectList.Select(c=>c.ToString()).ToArray<string>()) 

編輯:按@克里斯的評論 - 我使用統一的版本.NET的。我用微軟的文檔作爲參考,所以我仍然困惑爲什麼這會得到低估,但是......也許這是一個需要此解決方案的Unity特定問題。

+1

這對我來說非常合適,其他答案沒有。 – Chris

+0

我正在使用EF,因此我無法訪問我可以實現的ToString方法。您的解決方案可以在輕微的週期內完美工作。這裏是我的方法:return string.Join(「,」,skills.Select(s => s.Name).ToArray()); - 感謝這個想法 – BrianLegg