2010-07-26 19 views
5

Coś String.Join(",", new string[] { "a", "b" });, ale dla Guid[]Jak przekonwertować Guid [] na String?

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

var str = /* Magic */ 

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

Odpowiedz

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

Gdy lista GUID zaczyna rosnąć, ta metoda konkatenacji będzie powodować problemy z wydajnością. Można modyfikować go użyć StringBuilder:

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

Oba te są skomplikowane LINQ Extension metoda sposób robienia rzeczy. Można też po prostu użyć string.join:

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

Wow, idealnie! Dzięki! – BrunoLM

+2

@Bruno, oznacz go jako zaakceptowaną odpowiedź, jeśli to działa dla Ciebie! :-) – DaveDev

+0

Byłbym ciekawy, jak szybko działa w porównaniu do innych metod. Zgaduję, że Aggregate nie używa String.Concat do prawidłowego przydziału pamięci. –

5

myślałem, że to będzie działać?

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

zapomniałeś '' między GUID;) – Oded

+2

To będzie umieścić dodatkowy przecinek na końcu. –

+0

Ok, próbowałem szybko naprawić problem z przecinkiem. Jest nietestowany. Mam nadzieję, że to działa :-) – DaveDev

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

świetna i prosta odpowiedź –

+3

. NET 4 dodał ogólną metodę "Join", którą można po prostu przekazać tablicy 'guids' bez modyfikacji – thecoop

+0

@ theheop: Noted, thank you. –

1

jeśli ramy> = NET 3,5


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

.NET 4 dodaje metoda String.Join<T>(string separator, IEnumerable<T> values. Tak więc, w .NET 4, tylko to będzie działać:

String.Join(",", guids); 
+0

Miło wiedzieć, dzięki. – BrunoLM

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

Wydaje się, że to oświadczenie nie może przekazać kompilacji w VS2010? – Thomson

+0

Array.ConvertAll potrzebuje klasy, która implementuje 'Converter ', przekazujesz metodę. –

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)); 
Powiązane problemy