78 Stimmen

In C#: Anführungszeichen um eine Zeichenfolge in einer kommagetrennten Liste von Zeichenfolgen hinzufügen

Darauf gibt es wahrscheinlich eine einfache Antwort, aber ich habe wohl nicht genug Kaffee getrunken, um es selbst herauszufinden:

Wenn ich eine durch Komma getrennte Zeichenfolge wie:

string list = "Fred,Sam,Mike,Sarah";

Wie würde jedes Element erhalten und fügen Sie Anführungszeichen um es und stecken Sie es wieder in eine Zeichenfolge wie diese:

string newList = "'Fred','Sam','Mike','Sarah'";

Ich gehe davon aus, dass die Iteration über jeden einzelnen ein Anfang wäre, aber danach bin ich nicht mehr weitergekommen.

Eine Lösung, die hässlich ist:

int number = 0;
string newList = "";
foreach (string item in list.Split(new char[] {','}))
{
    if (number > 0)
    {
        newList = newList + "," + "'" + item + "'";
    }
    else
    {
        newList = "'" + item + "'";
    }
    number++;
}

122voto

FOR Punkte 3972
string s = "A,B,C";
string replaced = "'"+s.Replace(",", "','")+"'";

Danke für die Kommentare, ich hatte die externen Zitate übersehen.

Natürlich... wenn die Quelle eine leere Zeichenfolge war, würden Sie die zusätzlichen Anführungszeichen um sie herum wollen oder nicht? Und was wäre, wenn die Eingabe aus einer Reihe von Leerzeichen bestünde... ? Ich meine, um eine 100% vollständige Lösung zu geben, würde ich wahrscheinlich nach einer Liste von Unit-Tests fragen, aber ich hoffe, mein Bauchgefühl hat Ihre Kernfrage beantwortet.

Update : Es wurde auch eine LINQ-basierte Alternative vorgeschlagen (mit dem zusätzlichen Vorteil, dass String.Format verwendet wird und man sich daher nicht um führende/abschließende Anführungszeichen kümmern muss):

string list = "Fred,Sam,Mike,Sarah";
string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList());

35voto

vcuankit Punkte 747

Nach dem obigen Beispiel von Jon Skeet hat es bei mir folgendermaßen funktioniert. Ich hatte bereits eine List<String> Variable namens __messages, also habe ich Folgendes getan:

string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));

29voto

Jon Skeet Punkte 1325502
string[] bits = list.Split(','); // Param arrays are your friend
for (int i=0; i < bits.Length; i++)
{
    bits[i] = "'" + bits[i] + "'";
}
return string.Join(",", bits);

Oder Sie könnten LINQ verwenden, insbesondere mit einer Version von String.Join, die Folgendes unterstützt IEnumerable<string> ...

return list.Split(',').Select(x => "'" + x + "'").JoinStrings(",");

Es gibt eine Implementierung von JoinStrings anderswo auf SO... Ich werde danach suchen.

EDIT: Nun, es ist nicht ganz die JoinStrings, die ich dachte an, so hier ist es:

public static string JoinStrings<T>(this IEnumerable<T> source, 
                                    string separator)
{
    StringBuilder builder = new StringBuilder();
    bool first = true;
    foreach (T element in source)
    {
        if (first)
        {
            first = false;
        }
        else
        {
            builder.Append(separator);
        }
        builder.Append(element);
    }
    return builder.ToString();
}

Heutzutage string.Join hat eine generische Überladung stattdessen aber, so dass Sie einfach verwenden könnten:

return string.Join(",", list.Split(',').Select(x => $"'{x}'"));

19voto

Tor Haugen Punkte 19063
string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";

7voto

dylanh724 Punkte 785

Basierend auf dem Beispiel von Jon Skeet, aber modernisiert für .NET 4+:

// [ "foo", "bar" ] => "\"foo\"", "\"bar\""  
string.Join(", ", strList.Select(x => $"\"{x}\""));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X