2015-12-15 17 views
7

Co oznacza ? w następującym kodzie C#?Składnia zapytania na wywołanie metody

var handler = CallBack; 
handler?.Invoke(); 

Czytałem, że można użyć ? przed typu, aby wskazać, że jest to rodzaj pustych. Czy to robi to samo?

+0

To jest operator bezpiecznej nawigacji, nowy w C# 6. Gdzieś na SO musi być duplikat. – senshin

+2

Nie, to nie jest to samo, co deklarowanie typu zerowego. To, co widzisz, to składnia C# 6, zwana 'operatorem warunkowym 'null' – Jonesopolis

+1

Oto dokumentacja (https://msdn.microsoft.com/en-us/library/dn986595.aspx) – juharr

Odpowiedz

14

Jest to C# 6 Kod pomocą null conditional operator wskazując, że ten kod nie będzie rzucać NullReferenceException wyjątek jeśli handler jest zerowy:

Delegate handler = null; 
handler?.Invoke(); 

który uniknąć piszesz kontrole zerowe, które trzeba by zrobić w poprzednich wersjach języka C#:

Delegate handler = null; 
if (handler != null) 
{ 
    handler.Invoke(); 
} 
+1

Dlaczego odpowiedź na to pytanie, kiedy jest tak wyraźnie dup? –

+5

@Lynn OP zapytał: "Co oznacza znak? W następującym kodzie C#?" Czy odpowiedź na to pytanie brzmi: "Jest to lepszy sposób na przeprowadzenie głębokiej kontroli zerowej"? To nie jest (IMO) dobry dupek. Po prostu jest to jedna z możliwych odpowiedzi na stare pytanie. –

+1

@GrantWinney Twierdzę, że gdy ktoś przyjdzie na to pytanie od Google, zobaczy drogowskaz wskazujący na inne pytanie. Następnie będą czytać o tym, jak wcześniej nie było zwięzłego sposobu przeprowadzania zerowych kontroli warunkowych, ale teraz jest ... i będą mieli "ah ha!" moment rodzaju. –