Подтвердить что ты не робот

Оператор + = с нулевыми типами в С#

В С#, если я пишу

int? x = null;
x += x ?? 1

Я ожидаю, что это будет эквивалентно:

int? x = null;
x = x + x ?? 1

Таким образом, в первом примере x будет содержать 1, как во втором примере. Но это не так, оно содержит null. Оператор + =, похоже, не работает с типами NULL, если они не были назначены. Почему это должно быть так?

Изменить. Как указано, это потому, что null + 1 = null и приоритет оператора. В моей защите я думаю, что эта строка в MSDN неоднозначна!:

Предопределенные унарные и двоичные операторы и любые пользовательские операторы, которые существуют для типов значений, также могут использоваться с помощью NULL типы. Эти операторы производят нулевое значение, если [любой из] операнды равны нулю; в противном случае оператор использует указанное значение для вычислить результат.

4b9b3361

Ответ 1

Вот разница между двумя утверждениями:

x += x ?? 1
x = (x + x) ?? 1

Второе не то, что вы ожидали.

Здесь разбивка их обоих:

x += x ?? 1
x += null ?? 1
x += 1
x = x + 1
x = null + 1
x = null

x = x + x ?? 1
x = null + null ?? 1
x = null ?? 1
x = 1