C#, jeśli napisaćOperator + = z pustych typu C#
int? x = null;
x += x ?? 1
by się spodziewać, że jest to równoważne z:
int? x = null;
x = x + x ?? 1
A zatem w pierwszym przykładzie, x
byłoby zawierają 1
jak w drugim przykładzie. Ale tak nie jest, zawiera zero. Operator + = wydaje się nie działać na typach zerujących, jeśli nie zostały one przypisane. Dlaczego tak powinno być?
Edytuj: Jak wskazano, dzieje się tak dlatego, że null + 1 = null
i pierwszeństwo operatora. W mojej obronie, myślę, że ta linia w MSDN jest niejednoznaczna !:
Predefiniowane jednoargumentowe i operatory binarne i wszystkie zdefiniowane przez użytkownika operatorów, które istnieją dla typów wartości mogą być również wykorzystywane przez pustych typów. Operatory te wytwarzają wartość pustą, jeśli argumenty [dowolnego z] są dowolne; w przeciwnym razie operator używa wartości zawartej do obliczyć wynik.
+1 Ach, operator pierwszeństwo, mój starożytny wróg. Znowu uderzasz! – JDB
Czy "??" nie ma pierwszeństwa przed '+'? (@ Odpowiedź Servy'ego) –
@AustinSalonen Nope. http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –