Как я могу использовать Nullable Operator с оператором Null Conditional?

Старый Путь

int? myFavoriteNumber = 42;
int total = 0;
if (myfavoriteNumber.HasValue)
  total += myFavoriteNumber.Value *2;

Новый способ?

int? myFavoriteNumber = 42; 
total += myFavoriteNumber?.Value *2; //fails 

4 ответа

Оператор нуль-распространения? будет, как говорится, распространять нулевое значение. В случае int?.Value это невозможно, так как тип Value, int, не может быть нулевым (если бы это было возможно, операция стала бы null * 2что бы это значило?) Таким образом, "Старый путь" все еще является текущим способом сделать это.

Попробуй это:

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber??0) *2; 

Выражение (myFavoriteNumber?? 0) возвращает 0 в случае myFavoriteNumber нулевой.

Я думаю, что вы неправильно поняли использование null условный оператор. Он используется для короткого замыкания цепочки ifs к nullкогда один из шагов дает null,

Вот так:

userCompanyName = user?.Company?.Name;

Обратите внимание, что userCompanyName будет содержать null если user или же user.Company является null, В вашем примере total не может принять nullтак что это больше об использовании?? чем что-либо еще:

total = (myFavoriteNumber ?? 0) * 2;

Попробуй это

int? myFavoriteNumber = 42; 
total += (myFavoriteNumber.Value!=null)? myFavoriteNumber.Value*2 : 0;
Другие вопросы по тегам