2010-07-26 18 views
5

Algo así como String.Join(",", new string[] { "a", "b" });, pero para Guid[]Cómo convertir Guid [] a String?

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

var str = /* Magic */ 

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

Respuesta

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

vez que su lista de GUID comienza a crecer, este método de concatenación va a causar problemas de rendimiento. Usted puede modificarlo para utilizar un StringBuilder:

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

Ambos son la complicada LINQ Extensión manera método de hacer las cosas. También puede simplemente usar string.join:

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

¡Guau, perfecto! ¡Gracias! – BrunoLM

+2

@ Bruno, márquelo como la respuesta aceptada si es lo que funcionó para usted. :-) – DaveDev

+0

Me gustaría saber qué tan rápido funciona en comparación con otros métodos. Supongo que Aggregate no usa String.Concat para asignar memoria correctamente. –

5

pensé que esto iba a funcionar?

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

Ha olvidado el ',' entre GUID;) – Oded

+2

que pondrá coma adicional al final. –

+0

Ok, traté de arreglar el problema de las comas rápidamente. No está probado. Espero que funcione :-) – DaveDev

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

respuesta genial y simple –

+3

.NET 4 agregó un método genérico 'Join' que puede simplemente pasar la matriz' guids' sin modificaciones – thecoop

+0

@thecoop: Gracias, gracias. –

1

si su marco> = .NET 3,5


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

.NET 4 añadido un método String.Join<T>(string separator, IEnumerable<T> values. Así, en .NET 4, solo que esto funcionará:

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

Eso es bueno saber, gracias. – BrunoLM

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

Parece que esta declaración no puede pasar la compilación en VS2010? – Thomson

+0

Array.ConvertAll necesita una clase que implemente 'Converter ', está pasando un método. –

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