Ich möchte eine Zeichenkette so abschneiden, dass sie nicht länger als ein bestimmter Wert ist. Ich schreibe in eine Datenbanktabelle und möchte sicherstellen, dass die Werte, die ich schreibe, die Einschränkung des Datentyps der Spalte erfüllen.
Es wäre zum Beispiel schön, wenn ich Folgendes schreiben könnte:
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
Leider führt dies zu einer Ausnahme, da maxLength
im Allgemeinen die Grenzen der Zeichenfolge überschreitet value
. Natürlich könnte ich eine Funktion wie die folgende schreiben, aber ich hatte gehofft, dass so etwas bereits existiert.
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
Wo ist die schwer fassbare API, die diese Aufgabe erfüllt? Gibt es eine?
31 Stimmen
Für das Protokoll, Strings sind unveränderlich Sie können nicht truncate Sie können nur eine abgeschnittene Kopie von ihnen zurück. Ich weiß, das ist pingelig.
3 Stimmen
@John Weldon: Das ist wahrscheinlich der Grund, warum die Memberfunktion nicht existiert - sie folgt nicht der Semantik des Datentyps. Eine kleine Anmerkung am Rande,
StringBuilder
können Sie durch Verkürzung der Länge abschneiden, aber Sie müssen immer noch die Längenprüfung durchführen, um eine Verbreiterung der Zeichenkette zu vermeiden.1 Stimmen
Unabhängig davon, für welche Lösung Sie sich entscheiden, sollten Sie vor dem Aufruf von Substring oder dem Zugriff auf die Length-Eigenschaft eine Prüfung auf eine Null-Zeichenkette hinzufügen.
3 Stimmen
@SteveGuidi - Wenn das der Fall wäre, dann gäbe es keine Funktionen wie Trim oder Replace, die ähnliche semantische Probleme haben
3 Stimmen
@JohnWeldon Sie sind pingeliger als Microsoft selbst - sie dokumentieren zum Beispiel gerne,
.Trim()
auf eine Art und Weise, die irreführenderweise so klingt, als würde die Zeichenkette mutiert: "Entfernt alle führenden und abschließenden Leerzeichen aus dem aktuellen String-Objekt."0 Stimmen
Warum nicht einfach Truncate aus Microsoft.Toolkit.Extensions verwenden? Oder vielleicht gab es das damals noch nicht.