Warum gibt es keine IsNullOrEmpty-Überladungsmethode ohne Parameter?

7

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.

    
Adrian Grigore 24.04.2009, 16:48
quelle

8 Antworten

27

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 %.

    
mquander 24.04.2009, 16:50
quelle
27

Wenn der String null wäre, würde das Aufrufen von IsNullOrEmpty() eine NullReferenceException verursachen.

%Vor%

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%     
Daniel Brückner 24.04.2009 16:50
quelle
5

Vor C # 3.0 und den Erweiterungsmethoden gab es keine Möglichkeit, eine Methode für ein Nullobjekt aufzurufen.

    
RossFabricant 24.04.2009 16:50
quelle
3

Der Grund dafür, dass es keine Instanzmethode gibt, liegt darin, dass myString.IsNullOrEmpty, wenn die Zeichenfolge wirklich null ist, "throw".

    
JaredPar 24.04.2009 16:50
quelle
2

Ich habe eine Erweiterungsmethode - IsNothing - erstellt, die nicht nur prüft, ob sie null oder leer ist, sondern auch nur Leerzeichen enthält.

%Vor%     
tvanfosson 24.04.2009 17:15
quelle
1

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.

    
Chris Ballard 24.04.2009 17:48
quelle
0

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.

    
Brian Genisio 24.04.2009 17:00
quelle
0

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;
}

    
Jim Scott 24.04.2009 17:32
quelle

Tags und Links