2010-07-26 88 views
5

喜歡的東西String.Join(",", new string[] { "a", "b" });,但Guid[]如何將Guid []轉換爲String?

var guids = new Guid[] { Guid.Empty, Guid.Empty }; 

var str = /* Magic */ 

// str = 00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000 

回答

19
var str = guids.Select(g => g.ToString()) 
       .Aggregate((working, next) => working + "," + next); 

一旦你的GUID列表開始增長,拼接的這種方法將會導致性能問題。您可以修改它以使用StringBuilder:

var str = guids.Select(g => g.ToString()) 
       .Aggregate(new StringBuilder(), 
          (sb, str) => sb.Append("," + str), 
          sb => sb.ToString()); 

這兩者都是複雜的LINQ擴展方法。如果你的框架> = NET 3.5


String.Join(",", (from g in guids select g.ToString()).ToArray()) 
+0

哇,完美!謝謝! – BrunoLM 2010-07-26 15:19:01

+2

@布魯諾,將它標記爲接受的答案,如果它是爲你工作的! :-) – DaveDev 2010-07-26 15:20:55

+0

與其他方法相比,我很好奇它的工作速度。我猜Aggregate不使用String.Concat正確分配內存。 – 2010-07-26 15:23:01

5

我認爲這將工作?

StringBuilder stringBuilder = new StringBuilder(); 
int i = 0; 
foreach (var guid in guids) 
{ 
    stringBuilder.Append(guid.ToString()); 
    if (++i < guids.Length) 
    { 
     stringBuilder.Append(","); 
    } 
} 

var str = stringBuilder.ToString(); 
+0

你忘了','的GUID之間; – Oded 2010-07-26 15:14:03

+2

)也將增加一個額外的逗號結尾。 – 2010-07-26 15:14:55

+0

好吧,我試圖快速解決逗號問題。這是未經測試的。我希望它的工作原理:-) – DaveDev 2010-07-26 15:19:51

18
String.Join(",", guids.Select(g => g.ToString()).ToArray()); 
+0

偉大&簡單的答案 – 2010-07-26 15:22:23

+3

.NET 4增加了一個通用的'加入'方法,你可以不加修改地傳遞'guids'數組 – thecoop 2010-07-26 15:32:43

+0

@thecoop:注意,謝謝。 – 2010-07-26 15:33:52

1

:你也可以簡單地使用的string.join。所以,在.NET 4中,只是這將工作:

String.Join(",", guids); 
13

.NET 4中添加一個String.Join<T>(string separator, IEnumerable<T> values方法

var str = String.Join(",", guids.Select(g => g.ToString()).ToArray()); 
+0

很高興知道,謝謝。 – BrunoLM 2010-07-26 18:52:58

1
String.Join(",", Array.ConvertAll(guids, g => g.ToString())); 
+0

看來這個聲明無法在VS2010中通過編譯? – Thomson 2010-07-26 15:48:08

+0

Array.ConvertAll需要一個實現'Converter '的類,你傳入一個方法。 – 2010-07-26 15:58:03

0
//Convert string to List<string>  
List<string> guidList = your_string.Split(',').ToList<string>(); 

//Convert string to List<Guid>  
List<Guid> guidList = your_string.Split(',').ToList<string>().ConvertAll<Guid>(g => new Guid(g));