Что является предпочтительным: новый Nullable <int> или (int?) Null?
Какой способ является предпочтительным в таких выражениях:
int? Id
{
get
{
int i;
return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
}
}
лучше ли нарисовать на null или создать new Nullable<T>?
Ответ 1
Лучше всего default(int?), потому что он всегда работает как ожидалось (типы ссылок, типы значений и даже в дженериках).
Ответ 2
Я предпочитаю обозначать (int?) до Nullable<int>. Язык предоставляет этот синтаксический сахар, поэтому я пытаюсь его использовать.
Вот почему я называю это int вместо Int32.
Ответ 3
Не имеет значения, он генерирует точный код. (int?)null преобразуется компилятором С# в new Nullable<int>(). Вы можете это увидеть сами, написав небольшую тестовую программу и глядя на нее с помощью ildasm.exe
Итак, "лучше" - это просто тот стиль, который вы предпочитаете. Последовательное использование int? было бы моим личным предпочтением.
Одно практическое замечание: в типичном отладочном сеансе вам может быть интересно узнать, возвращается ли null. Тем более, что прочитанные вами данные не дают ожидаемого результата. Это становится очень легко, если вы напишете оператор null-return в отдельной строке:
int i;
if (Int32.TryParse(Request["id"], out i)) return i;
else return null; // <== set breakpoint here.
Избавиться от броска тоже. И выдает точный код
Ответ 4
Сделайте для себя все, что вам лучше.
Я сказал, что предпочитаю просто возвращать null, а компилятор детализирует детали.
Ответ 5
Интересно, что вам нужно только определить один из типов возврата. Другими словами, это также будет работать:
return Int32.TryParse(Request["id"], out i) ? (int?)i : null;
... хотя компилятор предлагает вам указать значение null:
Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между 'int' и '<null> '