Если у меня есть следующий метод
public int Add(int? a, int? b) {
a ??= 0;
b ??= 0;
return a + b;
}
Последняя строка выдаст ошибку: «Невозможно неявно преобразовать тип 'int?» в 'int'"
Я могу это исправить, добавив явное приведение ((int)(a + b)) или путем объединения каждого операнда по нулю ((a ?? 0) + (b ?? 0))..
Мой вопрос: есть ли какой-нибудь способ сообщить компилятору, что, поскольку мы уже объединили каждую переменную в 0, их можно рассматривать как int s вместо int?s?
В TypeScript есть пример функциональности, о которой я спрашиваю. В TS следующий код работает, потому что к моменту, когда мы добираемся до последней строки, компилятор знает, что a и b являются числовыми типами, а не числовыми | не определено.
const add = (a?: number, b?: number): number => {
// At this point, a and b are both number | undefined
a ??= 0; // a is now number
b ??= 0; // b is now number
return a + b; // a + b returns number, not number | undefined
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... s-not-null