2010-07-26 50 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));