2010-07-26 16 views
5

Qualcosa di simile String.Join(",", new string[] { "a", "b" });, ma per Guid[]Come convertire Guid [] in String?

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

var str = /* Magic */ 

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

risposta

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

Una volta che l'elenco di GUID inizia a crescere, questo metodo di concatenazione sta per causare problemi di prestazioni. È possibile modificare in modo da utilizzare uno StringBuilder:

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

Entrambi questi sono i complicati LINQ Metodo di estensione modo di fare le cose. Si potrebbe anche usare semplicemente String.Join:

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

Wow, perfetto! Grazie! – BrunoLM

+2

@Bruno, contrassegnalo come la risposta accettata se è quello che ha funzionato per te !! :-) – DaveDev

+0

Sarei curioso di sapere quanto velocemente funzioni rispetto ad altri metodi. Immagino che Aggregate non usi String.Concat per allocare correttamente la memoria. –

5

ho pensato che questo avrebbe funzionato?

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

Hai dimenticato la ',' tra GUID;) – Oded

+2

che metterà virgola in più alla fine. –

+0

Ok, ho provato a risolvere rapidamente il problema con la virgola. Non è stato testato. Spero che funzioni :-) – DaveDev

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

ottima e semplice risposta –

+3

. NET 4 ha aggiunto un metodo generico 'Join' che consente di passare semplicemente l'array' guids' a senza modifiche – thecoop

+0

@thecoop: Notato, grazie. –

1

se il quadro> = NET 3,5


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

.NET 4 aggiunto un metodo String.Join<T>(string separator, IEnumerable<T> values. Così, in .NET 4, proprio questo funzionerà:

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

È bello sapere, grazie. – BrunoLM

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

Sembra che questa istruzione non possa superare la compilazione in VS2010? – Thomson

+0

Array.ConvertAll ha bisogno di una classe che implementa 'Converter ', stai passando un metodo. –

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