2010-07-26 6 views
5

Quelque chose comme String.Join(",", new string[] { "a", "b" });, mais pour Guid[]Comment convertir Guid [] en String?

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

var str = /* Magic */ 

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

Répondre

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

Une fois votre liste de Guids commence à se développer, cette méthode de concaténation va causer des problèmes de performance. Vous pouvez le modifier pour utiliser un StringBuilder:

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

Les deux sont la voie de la méthode compliquée LINQ Extension de faire les choses. Vous pouvez également utiliser simplement String.Join:

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

Wow, parfait! Merci! – BrunoLM

+2

@Bruno, marquez-le comme la réponse acceptée si c'est ce qui a fonctionné pour vous !! :-) – DaveDev

+0

Je serais curieux de savoir à quelle vitesse cela fonctionne par rapport à d'autres méthodes. Je suppose que Aggregate n'utilise pas String.Concat pour allouer de la mémoire correctement. –

5

Je pensais que cela fonctionnerait?

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

Vous avez oublié le ',' entre GUIDs;) – Oded

+2

Cela va mettre une virgule supplémentaire à la fin. –

+0

Ok, j'ai essayé de résoudre le problème de virgule rapidement. C'est non testé. J'espère que cela fonctionne :-) – DaveDev

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

grande et simple réponse –

+3

.NET 4 a ajouté une méthode générique 'Join' que vous pouvez simplement passer le tableau' guids' à sans modifications – thecoop

+0

@thecoop: Noté, merci. –

1

si votre cadre> = 3.5 .NET


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

.NET 4 a ajouté une méthode String.Join<T>(string separator, IEnumerable<T> values. Ainsi, dans 4 .NET, tout cela va fonctionner:

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

C'est bon à savoir, merci. – BrunoLM

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

Il semble que cette déclaration ne peut pas passer la compilation dans VS2010? – Thomson

+0

Array.ConvertAll a besoin d'une classe qui implémente 'Converter ', vous passez une méthode. –

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)); 
Questions connexes