none
Alternative für x == null RRS feed

  • Frage

  • Hallo,

    als langjähriger Delphi-Programmierer bin ich es gewohnt, Variablen mit der Funktion Assigned auf nil (Delphi-Pendant zu null) zu prüfen.

    Gibt es etwas vergleichbares auch in C# oder muss ich immer

    x == null
    
    

    schreiben?

    Montag, 16. August 2010 08:42

Antworten

  • Hallo Heiko,

    eine andere Sprache hat andere Sitten ;-)
    Du solltest Dich daran gewöhnen, wenn Dein Code von anderen C#-Programmierern verstanden werden soll.

    In C# ist - ähnlich wie in C(++), Java uam. - ist die Prüfung if (x == null) die dafür übliche Syntax.
    Und der Compiler ergänzt dies sogar, wenn erforderlich, wie bei Nullable Types, wo daraus eine Prüfung
    auf HasValue wird.

    Für Sonderfälle gibt es eigene Methoden, wie z. B. String.IsNullOrEmpty (bzw. ab 4.0 auch IsNullOrWhiteSpace ).
    Und mit dem ?? Operator existiert eine Kurznotation für Ersatzwerte bei Nullables und Referenztypen.
    Von einer generellen Erweiterungsmethode sollte man absehen, da ineffizienter (und für C# untypisch).

    Gruß Elmar

    • Als Antwort markiert Heiko Adams Montag, 16. August 2010 09:25
    Montag, 16. August 2010 09:20

Alle Antworten

  • Hallo Heiko,

    eine andere Sprache hat andere Sitten ;-)
    Du solltest Dich daran gewöhnen, wenn Dein Code von anderen C#-Programmierern verstanden werden soll.

    In C# ist - ähnlich wie in C(++), Java uam. - ist die Prüfung if (x == null) die dafür übliche Syntax.
    Und der Compiler ergänzt dies sogar, wenn erforderlich, wie bei Nullable Types, wo daraus eine Prüfung
    auf HasValue wird.

    Für Sonderfälle gibt es eigene Methoden, wie z. B. String.IsNullOrEmpty (bzw. ab 4.0 auch IsNullOrWhiteSpace ).
    Und mit dem ?? Operator existiert eine Kurznotation für Ersatzwerte bei Nullables und Referenztypen.
    Von einer generellen Erweiterungsmethode sollte man absehen, da ineffizienter (und für C# untypisch).

    Gruß Elmar

    • Als Antwort markiert Heiko Adams Montag, 16. August 2010 09:25
    Montag, 16. August 2010 09:20
  • Naja, der Mensch ist halt ein Gewohnheitstier ;-) Aber wenn es so vorgesehen ist, das man mit x==null Variablen auf null prüft, dann werde ich mich schon daran gewöhnen :-)
    Montag, 16. August 2010 09:26
  • Zur Verdeutlichung: Unter Delphi kann man Pointer mit Hilfe von Assigned auf nil prüfen. Intern macht Assigned wahrscheinlich auch nicht viel mehr als den übergebenen Pointer auf x=nil zu prüfen. Für Variants (werden für COM und OLE hauptsächlich verwendet) gibt es als Pendant dazu die Funktion VarIsClear, die die übergebene Variable auf unassigned (= jungfräulich "leer") und nil (=null) prüft.

    Aber da meine Eingangsfrage zwischenzeitlich beantwortet wurde, soll das hier nur als zusätzliche Hintergrundinfo dienen ;-)

    Montag, 16. August 2010 09:42
  • Hallo,

    für spezielle Zwecke bietet C# auch noch die ??-Syntax:

    var a = b ?? c
    Wenn b == null ist, wird c zurückgegeben (a ist dann c), ansonsten b. Ist ganz praktisch, wenn man sich Null-Objekte definiert, die dann zurückgegeben werden können, oder wenn Eigenschaften bei Bedarf initialisiert werden sollen:
    private object _field;
    public object Property {
     get { return _field ?? (_field = new Object()); }
    }
     
    

    Wenn du das lieber mit Funktionen machen willst, definier dir doch eine eigene Funktion Assigned. Als Erweiterungsmethode für Objekt wär das vielleicht clever:

     

    namespace My {
     public static class Erweiterung {
     public static bool Assigned(this object o) {
      return o != null; 
     }
     }
    }
    

    dann braucht man nur den Namespace einbinden und kann Methode direkt auf jedem Objekt verwenden:

    
    
    using My;
    var object o;
     if (o.Assigned()) .... 

    Montag, 30. August 2010 08:48