In Visual Basic ist die Left()-Funktion ein wichtiges Instrument, um die Länge einer Zeichenkette zu begrenzen, zum Beispiel vor der Übergabe an ein Datenbankfeld begrenzter Länge. Überstehende Zeichen werden dabei abgeschnitten. In C# gibt es diese Funktion nicht, man muss immer mit String.SubString() arbeiten. Aber Achtung: Wenn die Zeichenkette kleiner ist als die angegebene Maximallänge, kommt ArgumentOutOfRangeException („Index and length must refer to a location within the string.“). Also muss man vorher prüfen, ob die Zeichenkette lang genug ist. Das würde dann folgendermaßen aussehen:
string Eingabe3 = "0123456789"; string ReduzierteEingabe2 = Eingabe3.Substring(0, Math.Min(5, Eingabe3.Length)); Console.WriteLine(ReduzierteEingabe2);
Nun kann man zwar in C# eine Referenz auf die Microsoft.VisualBasic.dll setzen und schreiben:
string ReduzierteEingabe1 = Microsoft.VisualBasic.Strings.Left(Eingabe3, 5); Console.WriteLine(ReduzierteEingabe1);
Aber es gibt eine ganze Menge C#-Entwickler, die sich vor dieser Referenz fürchten. Und eine ganze Menge „Gutachter“, die die Softwarearchitektur deswegen sofort abwerten würden. Wie wäre es mit:
string ReduzierteEingabe2 = Eingabe3.Truncate(5); Console.WriteLine(ReduzierteEingabe2);
Truncate() ist eine Erweiterungsmethode für die Klasse System.String. Dabei kann man optional noch angeben, ob das Abschneiden der Zeichenkette durch ein Auslassungszeichen kenntlich gemacht werden soll. Im Standard sind das drei Punkte. So macht Eingabe3.Truncate(5, true, „?“) aus 0123456789 ein 0123?. Das Auslassungszeichen wird bei der Maximallänge also mit berücksichtigt.
namespace ITVisions { public static class StringExtensions { ////// Begrenzt einen String auf n zeichen /// /// Zeichenkette ///ggf. reduzierte Zeichenkette public static string Truncate(this string obj, int Anz, bool WithDots = false, string Dots = "...") { if (obj == null) return obj; if (obj.Length <= Anz) return obj; if (WithDots) return obj.Substring(0, Anz - Dots.Length) + Dots; return obj.Substring(0, Anz); } } }