Проверьте целочисленное значение: Null in С#
У меня есть целочисленное значение, и мне нужно проверить, является ли оно NULL или нет. Я получил его с помощью оператора с нулевым коалесцированием
С#:
public int? Age;
if ((Age ?? 0)==0)
{
// do somethig
}
Теперь мне нужно проверить более старое приложение, где часть объявления не находится в тройном порядке. Итак, как добиться этого без оператора нулевой коалесценции.
Ответы
Ответ 1
Nullable<T>
(или ?
) предоставляет флаг HasValue
для обозначения того, установлено ли значение или элемент равен null.
Кроме того, типы с нулевым значением поддерживают ==
:
if (Age == null)
??
- это нулевой коалесцирующий оператор и не приводит к булевскому выражению, но возвращается значение:
int i = Age ?? 0;
Итак, для вашего примера:
if (age == null || age == 0)
Или:
if (age.GetValueOrDefault(0) == 0)
Или:
if ((age ?? 0) == 0)
Или тройной:
int i = age.HasValue ? age.Value : 0;
Ответ 2
Несколько вещей:
Age
не является целым числом - это целочисленный тип с нулевым значением. Они не одинаковы. Подробнее см. Документацию Nullable<T>
в MSDN.
??
- это оператор null coalesce, а не тернарный оператор (фактически называемый условный оператор).
Чтобы проверить, использует ли тип с нулевым значением значение HasValue
, или прямое соответствие с null
:
if(Age.HasValue)
{
// Yay, it does!
}
if(Age == null)
{
// It is null :(
}
Ответ 3
Уже есть правильный ответ от Адама, но у вас есть еще один вариант для реорганизации вашего кода:
if (Age.GetValueOrDefault() == 0)
{
// it null or 0
}
Ответ 4
Просто вы можете сделать это:
public void CheckNull(int? item)
{
if (item != null)
{
//Do Something
}
}
Ответ 5
Как указано выше, ??
является оператором нулевой коалесценции. Таким образом, эквивалент
(Age ?? 0) == 0
без использования ??
оператор
(!Age.HasValue) || Age == 0
Однако нет версии .Net, которая Nullable <T> , но не ??
, поэтому ваше утверждение
Теперь мне нужно проверить старое приложение, где часть объявления не находится в тройном порядке.
недействителен.