Lista de C # <string> para string com delimitador

631

Existe uma função no C # para converter rapidamente alguma coleção em string e separar valores com delimitador?

Por exemplo:

List<string> names -> string names_together = "John, Anna, Monica"

nan
fonte

Respostas:

1201

Você pode usar String.Join. Se você tiver um List<string>, pode ligar ToArrayprimeiro:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

No .NET 4, você não precisa ToArraymais, pois há uma sobrecarga String.Joindisso IEnumerable<string>.

Resultados:


John, Anna, Monica

Quartermeister
fonte
95

Você também pode fazer isso com o linq, se desejar

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Embora eu prefira a sintaxe não-linq na resposta do Quartermeister e acho que Aggregatepode executar mais devagar (provavelmente mais operações de concatenação de cadeias).

Prumo
fonte
19
Obrigado pelas respostas rápidas, ambas funcionam bem. Você está certo, fiz uma pequena medição de desempenho usando a classe Stopwatch e o linq-way é muito mais lento: String.Join (",", names.ToArray ()); -> pegou 18 ticks Agregado ((a, b) => a + "," + b) -> pegou 736 ticks
nan
2
Sim, eu acho que Aggregateé melhor para operações do tipo Math. Com strings, esta operação é semelhante a for eaching e apenas é anexada a uma string que é muito lenta em ineficiente, porque você está criando uma nova string para cada item que existe na lista.
26410 Bob
Observe que Agregar sem um valor inicial lançará uma InvalidOperationException se o contêiner estiver vazio. Use a versão agregada Aggregate (seed, func) para evitar código de manipulação de erros ou verificações condicionais. String.Join não joga vazio, portanto, nenhuma semente ou código extra é necessário ... além disso, não requer Linq e a sintaxe é um pouco mais clara.
Huacanacha 25/11
1
A agregação no exemplo acima pode funcionar mais rápido se você usar o StringBuilder. O uso de '+' para executar concatenação múltipla não é recomendado. Consulte a seção Comentários aqui ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov