Wenn ich herausfinden will, ob eine Zeichenkette null oder leer ist, habe ich normalerweise die Zeichenkette bereits. Deshalb hätte ich erwartet, dass eine Dienstprogrammfunktion wie String.IsNullOrEmpty () ohne Parameter funktioniert:
%Vor%Dies funktioniert jedoch nicht, da IsNullOrEmpty einen String-Parameter erwartet. Stattdessen muss ich schreiben:
%Vor%Warum ist das so? Es scheint unnötig klobig. Natürlich kann ich dafür leicht eine eigene Erweiterungsmethode schreiben, aber es scheint eine sehr offensichtliche Unterlassung zu sein, also frage ich mich, ob es einen guten Grund dafür gibt. Ich kann nicht glauben, dass die parameterlose Überlastung dieser Funktion gerade von Microsoft vergessen wurde.
Diese Methode wurde bereits lange vor dem Hinzufügen von Erweiterungsmethoden zu C # implementiert, und vor den Erweiterungsmethoden gab es keine Möglichkeit, eine Instanzmethode / -eigenschaft wie xyz.IsNullOrEmpty()
zu definieren, die Sie noch aufrufen konnten, wenn xyz
% co_de war %.
Wenn der String null
wäre, würde das Aufrufen von IsNullOrEmpty()
eine NullReferenceException
verursachen.
Jetzt haben wir Erweiterungsmethoden und wir können dies mit einer Erweiterungsmethode implementieren und die Ausnahme vermeiden. Aber denken Sie immer daran, dass dies nur funktioniert, weil Erweiterungsmethoden nichts anderes als syntaktischer Zucker für statische Methoden sind.
%Vor%Bei dieser Erweiterungsmethode wird niemals eine Ausnahme ausgelöst
%Vor%weil es nur syntaktischer Zucker dafür ist.
%Vor%Vor C # 3.0 und den Erweiterungsmethoden gab es keine Möglichkeit, eine Methode für ein Nullobjekt aufzurufen.
Ich habe eine Erweiterungsmethode - IsNothing - erstellt, die nicht nur prüft, ob sie null oder leer ist, sondern auch nur Leerzeichen enthält.
%Vor%Obwohl es durchaus möglich (und gültig) ist, eine Erweiterungsmethode zu definieren, um dies zu erreichen, würde ich mich sorgen, dass es syntaktisch seltsam aussieht, indem es erscheint als Methodenaufruf für ein Objekt das könnte null sein.
YMMV, aber ich werde bei String.IsNullOrEmpty
bleiben.
Dies könnte in C # 3.0 geschehen:
%Vor%Dann wird dies funktionieren:
%Vor%ABER
Es ist wichtig zu wissen, dass viele dies für eine schlechte Praxis halten. Dies liegt daran, dass es die Erwartungen des Benutzers verletzt. Verwenden Sie mit dieser Vorsicht.
Wenn Sie Erweiterungs-Methoden oder Hilfsmethoden zum Testen Ihrer Strings hinzufügen, möchten Sie vielleicht auch eine hinzufügen, die die Zeichenkette abschneidet, und die meisten von uns wollen in vielen Fällen auch keine Zeichenkette, die Whitespace hat als Tab oder Leerzeichen.
Hier ist eine unserer Testmethoden
public static bool IsTrimStringNullOrEmpty (Zeichenfolgenwert)
{
if (Wert == null) gibt true zurück;
if (value.Trim () == string.Empty) gibt true zurück;
falsch zurückgeben;
}
ODER
Wenn Sie den Wert testen und gleichzeitig trimmen möchten, falls NotNullOrEmpty
public static bool IsTrimStringNullOrEmpty (Ref-Zeichenfolgenwert)
{
if (Wert == null) gibt true zurück;
Wert = Wert.Trim ();
if (Wert == string.Empty) gibt true zurück;
falsch zurückgeben;
}
Tags und Links c#