C# Tips – operator ??
Pierwszy z serii krótkich wpisów-wskazówek dotyczących C#.
Zdarza Ci się, że musisz zwrócić albo przypisać jakąś referencję, a jeśli ma wartość null najpierw tworzysz dla niej nową instancję obiektu, np. tak jak w poniższym przykładzie?
//... if(value == null) { value = new Object(); } return value;
Jeśli tak to w języku C# istnieje operator ?? (podwójny znak zapytania), który pozwala skrócić ten zapis do jednej linii. Jego użycie wygląda następująco:
//... return value ?? new Object();
Jeśli value jest różne od null to zostanie zwrócona jego wartość natomiast w przeciwnym wypadku zwrócona będzie wartość umieszczona po prawej stronie operatora ??.
Dodatkowo jeśli value będzie używane kilkukrotnie (np. jest polem klasy i jest zwracana przez metodę tej klasy) i tylko przy pierwszym użyciu chcesz przypisać jej nowy obiekt możesz to zrobić w ten sposób:
//... return value ?? value = new Object();
Teraz w przypadku kiedy value ma przy pierwszym wykonaniu tej linii wartość null najpierw zostanie utworzony i przypisany do niej nowy obiekt, a następnie zawartość value będzie zwrócona. Kiedy kolejny raz będzie wykonywany ten kod (np. funkcja zawierająca powyższą linię i będąca częścią klasy, w której value jest polem będzie ponownie wywołana) to zwrócona będzie poprzednio przypisana wartość zmiennej value.
A ja spotkałem się z takim zapisem
return value ?? value = value = new Object();
Jak go rozumieć?
Z zapisem, który podałeś jeszcze nigdy się nie spotkałem, ale bardzo możliwe, że powoduje on nie tylko zwrócenie new Object() w razie jak value jest null, ale też przypisuje ten Object do value.