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