Ich rufe viele Informationen in einer Liste ab, die mit einer Datenbank verknüpft ist, und möchte eine Reihe von Gruppen für jemanden erstellen, der mit der Website verbunden ist.
Ich benutze dies zum Testen, aber das ist nicht dynamisch, also ist es wirklich schlecht:
string strgroupids = "6";
Ich möchte das jetzt nutzen. Aber die zurückgegebene Zeichenfolge ist so etwas wie1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Ich möchte das ,
nach dem löschen, 5
aber es funktioniert definitiv nicht.
strgroupids = strgroupids.TrimEnd(new char[] { ',' });
aber es gibt unten bessere Ideen.Antworten:
MSDN:
quelle
Was ist damit?
Ein viel sauberer.
Es werden alle Elemente im Inneren
groupIds
mit einem','
Zwischenzeichen versehen, aber es wird kein','
am Ende gesetzt.quelle
Zeichenfolgen in c # sind unveränderlich. Wenn Sie dies in Ihrem Code tun
strgroupids.TrimEnd(',');
oderstrgroupids.TrimEnd(new char[] { ',' });
diestrgroupids
Zeichenfolge nicht geändert wird .Sie müssen
strgroupids = strgroupids.TrimEnd(',');
stattdessen so etwas tun .Um von hier aus zu zitieren :
quelle
Fügen Sie eine Erweiterungsmethode hinzu.
dann benutze:
quelle
int n
die Anzahl der Zeichen eingeben, die am Ende entfernt werden sollen. Zweitens testen Sie auf die Länge Null, aber das beseitigt nicht alle möglichen Ausnahmen.int index = ..LastIndexOf..
Dann wäre es besserif (index >= 0)
.string character
schlecht benannt. Viertens ist es für zukünftige Programmierer nicht sofort offensichtlich, dass dadurch Zeichen am Ende der Zeichenfolge entfernt werden. Oh warte, das muss nicht unbedingt so sein. Es sucht die Zeichenfolge. Es könnte irgendwo in der Mitte entfernt werden. Jetzt muss der Wartungsprogrammierer alle Verwendungen der Methode untersuchen, um festzustellen, was erreicht werden soll. Keine gute Methode zum Aufrufen, da diese einfache Notwendigkeit besteht, sie vom Ende einer Zeichenfolge zu entfernen. Entschuldigung für die Kritik; Ich mache das für jeden, der diese Methode anwendet, damit sie verstehen.String.TrimEnd
die Verwendung angemessener. Aber warten Sie, das gibt es bereits - und es wurde in der ursprünglichen Frage und einigen anderen Antworten vor 3 Jahren erwähnt - keine Notwendigkeit, eine neue Methode zu erfinden! Was ist der Vorteil Ihres Ansatzes?Entfernt nachfolgende Kommas:
Dies ist jedoch rückwärts, Sie haben den Code geschrieben, der das Komma an erster Stelle hinzufügt. Sie sollten
string.Join(",",g)
stattdessen verwenden, vorausgesetzt, esg
ist astring[]
. Gib ihm einen besseren Namen alsg
auch!quelle
Alternativ zum Hinzufügen eines Kommas für jedes Element können Sie auch String.Join verwenden:
Dadurch wird der Trennzeichen (in diesem Fall ",") zwischen jedem Element im Array hinzugefügt .
quelle
Beachten Sie, dass die Verwendung von
ForEach
hier normalerweise als "falsch" angesehen wird (lesen Sie beispielsweise http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx ).Verwenden von etwas LINQ:
Ohne End-Teilzeichenfolge:
quelle
string.Join
ist perfekt, wenn Sie eine Reihe von Zeichenfolgen als Quelle haben ODER Sie haben C # 4.0Zusätzlich zur Lösung von sll: Es ist besser, die Zeichenfolge zu kürzen, falls am Ende Leerzeichen vorhanden sind.
quelle
string.Join
ist besser, aber wenn Sie wirklich einen LINQ wollenForEach
:Einige Notizen:
string.Join
undforeach
beide sind besser als dieser, weitaus langsamere Ansatz,
da es nie angehängt wird+=
) ist praktisch zum Anhängen an Zeichenfolgen.ToString()
ist nicht erforderlich, da es beim Verketten von Nicht-Strings automatisch aufgerufen wirdStringBuilder
sollte berücksichtigt werden, anstatt Zeichenfolgen zu verkettenquelle
if(strgroupids != string.Empty){
ForEach
;foreach (var g in groupIds) {
funktioniert genauso gut :)