Opprette en kommaseparert liste fra IList eller IEnumerable

Hva er den reneste måten å lage en kommaseparert liste med strengverdier fra en IList<string> eller IEnumerable<string>?

String.Join(...) opererer på en streng[], så det kan være tungvint å jobbe med når typer som IList<string> eller IEnumerable<string> ikke enkelt kan konverteres til en strengmatrise.

Løsning

.NET 4+ .NET 4+**

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

Detalj og pre .Net 4.0-løsninger Detalj og pre .0-løsninger

IEnumerable kan konverteres til en strengmatrise meget enkelt med LINQ (.NET 3.5):

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

Det er enkelt nok å skrive den tilsvarende hjelpemetoden hvis du trenger det:

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

Så kaller du den slik:

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

Du kan deretter kalle string.Join. Selvfølgelig du ikke bruke en hjelpemetode:

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

Sistnevnte er litt av en munnfull skjønt :)

Dette er sannsynligvis den enkleste måten å gjøre det på, og ganske performant også - det er andre spørsmål om nøyaktig hvordan ytelsen er, inkludert (men ikke begrenset til) denne.

Fra og med .NET 4.0 er det flere overbelastninger tilgjengelig i string.Join, slik at du faktisk bare kan skrive:

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

Mye enklere :)

Kommentarer (6)

kan du konvertere IList til en matrise ved hjelp av ToArray og deretter kjøre en string.join-kommando på matrisen.

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

Du kan bruke .ToArray()Lists og IEnumerables, og deretter bruke String.Join() som du vil.

Kommentarer (0)