Который предпочтен: новый Nullable <интервал> или (интервал?) пустой указатель?

Какой путь предпочтен в выражениях как это:

int? Id
{
   get
   {
      int i;
      return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
   }
}

лучше набрать null или создайте a new Nullable<T> ?

12
задан abatishchev 29 April 2010 в 17:43
поделиться

5 ответов

Лучше всего default (int?) , потому что он всегда работает должным образом (ссылочные типы, типы значений, и даже в дженериках).

23
ответ дан 2 December 2019 в 04:08
поделиться

Это не имеет значения, он генерирует точно такой же код . (int?) Null преобразуется компилятором C # в new Nullable () . Вы можете убедиться в этом сами, написав небольшую тестовую программу и посмотрев на нее с помощью ildasm.exe

. Итак, «лучше» - это просто то, какой стиль вы предпочитаете. Последовательное использование int? было бы моим личным предпочтением.

Одно практическое замечание: в типичном сеансе отладки вам может быть интересно узнать, что возвращается null. Тем более, что данные, которые вы читаете, не дают того, чего вы ожидаете. Это станет очень легко, если вы напишете оператор, возвращающий нуль, в отдельной строке:

   int i;
   if (Int32.TryParse(Request["id"], out i)) return i;
   else return null;       // <== set breakpoint here.

Избавьтесь также от приведений. И производит точно такой же код

5
ответ дан 2 December 2019 в 04:08
поделиться

Интересно то, что вам нужно определить только один из возвращаемых типов. Другими словами, это также будет работать:

  return Int32.TryParse(Request["id"], out i) ? (int?)i : null;

... даже если компилятор предлагает вам преобразовать значение null: Тип условного выражения не может быть определен, потому что не существует неявного преобразования между 'int' и ''

1
ответ дан 2 December 2019 в 04:08
поделиться

Я предпочитаю нотацию (int?) , а не Nullable . Язык предоставляет этот синтаксический сахар, поэтому я стараюсь его использовать.

Вот почему я называю его int вместо Int32 .

5
ответ дан 2 December 2019 в 04:08
поделиться

Делайте то, что вам кажется ясным.

Тем не менее, я предпочитаю просто возвращать null , а компилятор прорабатывает детали.

2
ответ дан 2 December 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: