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

Любопытный синтаксис С# с вопросительным знаком

private enum E_Week
{
   Mon = 0,
   Tue,
   . . .
}

Что означает следующий код?

E_Week? week= null;

Является ли он равным следующему коду? Какова функция '?' знак здесь?

E_Week week= null;
4b9b3361

Ответ 1

В вашем коде используется то, что называется тип с нулевым значением. Перечисление, подобно int или DateTime, является так называемым "типом значения", который всегда должен иметь некоторое значение. Необязательные типы позволяют обрабатывать типы значений, как если бы они допускали нулевые значения.

Например, этот код является недопустимым и не будет компилироваться, потому что перечисления не могут иметь значение null:

E_Week week = null;

Но этот код действителен:

E_Week? week = null;

И это точно так же, как это:

Nullable<E_Week> week = null;

Ответ 2

E_Week? эквивалентно Nullable<E_Week>

Подробнее о типах Nullable см. здесь.

Ответ 3

Самое существенное отличие состоит в том, что второе утверждение не работает;) The? знак в основном дает вам возможность установить тип значения (в этом случае перечисление) на нуль, что обычно невозможно.