Kuriant kableliais atskirtą sąrašą iš IList arba IEnumerable

Koks yra švariausias būdas sukurti kableliais atskirtą eilutės reikšmių sąrašą iš IList<string> arba IEnumerable<string>?

String.Join(...) veikia su string[], todėl gali būti sudėtinga dirbti, kai tokių tipų kaip IList<string> arba IEnumerable<string> negalima lengvai konvertuoti į styginių masyvą.

Sprendimas

.NET 4+

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

Detalūs & amp; Pre .Net 4.0 sprendimai

IEnumerable galima labai lengvai paversti į eilutės masyvą naudojant LINQ (.NET 3.5):

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

Jei reikia, nesunku parašyti lygiavertį pagalbinį metodą:

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

Tada jį iškvieskite taip:

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

Tada galite iškviesti string.Join. Žinoma, jūs neprivalote naudoti pagalbinio metodo:

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

Tačiau pastarasis yra šiek tiek sudėtingas :)

Tikėtina, kad tai paprasčiausias būdas, be to, gana našus - yra ir kitų klausimų apie tai, koks tiksliai yra našumas, įskaitant (bet neapsiribojant) šį.

Nuo .NET 4.0 yra daugiau perkrovų string.Join, todėl iš tikrųjų galite tiesiog parašyti:

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

Daug paprasčiau :)

Komentarai (6)

galite konvertuoti IList į masyvą naudodami ToArray ir tada paleisti string.join komandą masyve.

Dim strs As New List(Of String)
Dim arr As Array
arr = strs.ToArray
Komentarai (0)

Galite naudoti .ToArray() su Lists ir IEnumerables, o tada naudoti String.Join(), kaip norėjote.

Komentarai (0)