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

Проверьте целочисленное значение: Null in С#

У меня есть целочисленное значение, и мне нужно проверить, является ли оно NULL или нет. Я получил его с помощью оператора с нулевым коалесцированием

С#:

public int? Age;

if ((Age ?? 0)==0)
{
   // do somethig
}

Теперь мне нужно проверить более старое приложение, где часть объявления не находится в тройном порядке. Итак, как добиться этого без оператора нулевой коалесценции.

4b9b3361

Ответ 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> , но не ??, поэтому ваше утверждение

Теперь мне нужно проверить старое приложение, где часть объявления не находится в тройном порядке.

недействителен.