Quick Tip: 01. C# operator ??

Podczas tworzenia oprogramowania jedną z częściej wykonywanych operacji jest sprawdzanie, czy dany obiekt nie jest nullem. Często wygląda to tak:

MyType result;
if(Object1 != null)
{
  result = Object1;
}
else
{
  result = Object2;
}

lub

MyType result = Object1 != null ? Object1 : Object2;

Kod ten możemy sobie uprościć stosując operator ?? (podwójny znak zapytania). Operator ten zwraca obiekt będący “z lewej strony”, jeżeli jest on różny od null lub jeżeli jest nullem obiekt będący z jego “z prawej strony”.

Podany przykład będzie wyglądał tak:

MyType result = Object1 ?? Object2;

lub

MyType result = Object1 ?? Object2 ?? Object3;

Oczywiście Object1 może być również funkcją zwracającą obiekt, np:

public MyType MyObject
{
    get { return myObject ?? (myObject = objectFactory.Create()); }
}

zamiast:

public MyType MyObject
{
    get
    {
        if (myObject == null) myObject = objectFactory.Create();
        return myObject;
    }
}

Korzystając z tego operatora należy pamiętać, że pusty string nie jest nullem!

5 Responses to “Quick Tip: 01. C# operator ??”

  1. TomNo Gravatar Says:

    Czy to 01 w tytule oznacza, że to będzie stałą serią?:)


  2. Łukasz GąsiorNo Gravatar Says:

    zgadza się :)

    porady będą głównie dotyczyły C# i ASP.NET


  3. MaciekNo Gravatar Says:

    Mógłbyś zdradzić czego używasz do formatowania kodu (czy to jest może wtyczka do Windows Live Writera)?


  4. Łukasz GąsiorNo Gravatar Says:

    jest to plugin do WordPressa – SyntaxHighlighter

    do pobrania tutaj: http://wordpress.org/extend/plugins/syntaxhighlighter/
    lub tutaj: http://code.google.com/p/syntaxhighlighter/

    plugin jest napisany w javascript więc można go zintegrować z każdym systemem blogowym


  5. dotnetomaniak.pl Says:

    C# operator ??…

    Dziękujemy za publikację – Trackback z dotnetomaniak.pl…


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>