Criando uma lista separada por vírgulas da IList ou IEnumerable

Qual é a maneira mais limpa de criar uma lista separada por vírgula de valores de string a partir de uma 'ListaouIEnumerable`?

O String.Join(...) opera em uma string[]string[] então pode ser complicado de trabalhar quando tipos como IList<string> ou IEnumerable<string> não podem ser facilmente convertidos em uma array de string.

Solução

**.NET 4+***

IList strings = new List{"1","2","testing"};
string joined = string.Join(",", strings);

**Detalhes & Soluções Pre .Net 4.0***

IEnumerable` pode ser convertido em um array de string muito facilmente com LINQ (.NET 3.5):

IEnumerable strings = ...;
string[] array = strings.ToArray();

It'é fácil o suficiente para escrever o método de ajuda equivalente, se você precisar:

public static T[] ToArray(IEnumerable source)
{
    return new List(source).ToArray();
}

Então chama-lhe assim:

IEnumerable strings = ...;
string[] array = Helpers.ToArray(strings);

Você pode então chamar string.Join. Claro, você não't tenha para usar um método de ajuda:

// C# 3 and .NET 3.5 way:
string joined = string.Join(",", strings.ToArray());
// C# 2 and .NET 2.0 way:
string joined = string.Join(",", new List(strings).ToArray());

Este último, no entanto, é um bocadinho bocado bocado bocado :)

Esta é provavelmente a maneira mais simples de fazê-lo, e bastante performante também - há outras questões sobre exatamente como é a performance, incluindo (mas não limitado a) esta.

A partir de .NET 4.0, há mais sobrecargas disponíveis em string.Join`, então você pode realmente apenas escrever:

string joined = string.Join(",", strings);

Muito mais simples :)

Comentários (6)

você pode converter a IList para um array usando ToArray e então executar um comando string.join no array.

Dim strs As New List(Of String)
Dim arr As Array
arr = strs.ToArray
Comentários (0)

Você pode utilizar .ToArray() em Lists e IEnumerables, e então utilizar String.Join() como você quiser.

Comentários (0)