В С#, если я пишу
int? x = null;
x += x ?? 1
Я ожидаю, что это будет эквивалентно:
int? x = null;
x = x + x ?? 1
Таким образом, в первом примере x
будет содержать 1
, как во втором примере. Но это не так, оно содержит null. Оператор + =, похоже, не работает с типами NULL, если они не были назначены. Почему это должно быть так?
Изменить. Как указано, это потому, что null + 1 = null
и приоритет оператора. В моей защите я думаю, что эта строка в MSDN неоднозначна!:
Предопределенные унарные и двоичные операторы и любые пользовательские операторы, которые существуют для типов значений, также могут использоваться с помощью NULL типы. Эти операторы производят нулевое значение, если [любой из] операнды равны нулю; в противном случае оператор использует указанное значение для вычислить результат.