Nullable ToString ()

Я вижу повсюду конструкции вроде:

int? myVar = null;
string test = myVar.HasValue ? myVar.Value.ToString() : string.Empty;

Почему бы просто не использовать:

string test = myVar.ToString();

Разве это не то же самое? По крайней мере, Reflector говорит, что:

public override string ToString()
{
  if (!this.HasValue)
  {
    return "";
  }
  return this.value.ToString();
}

Итак, это правильно (более короткая версия) или я что-то упустил?

139
задан Josh Lee 7 April 2010 в 09:51
поделиться

4 ответа

Вы совершенно правы. Также в этом вопросе предлагается первое решение, хотя на самом деле никто не замечает, что ToString () уже дает правильный ответ.

Возможно, аргументом в пользу более подробного решения является удобочитаемость: когда вы вызываете ToString () для чего-то, что предполагается, что имеет значение null , вы обычно ожидает NullReferenceException , хотя здесь оно не генерируется.

111
ответ дан 23 November 2019 в 23:22
поделиться

Я думаю, что у многих есть такие проверки, потому что это неестественное поведение объекта, который может содержать нулевое значение.

14
ответ дан 23 November 2019 в 23:22
поделиться

Нет, вы правы, более короткая версия совпадает с тем, что сделали другие люди в этом отношении. Другой конструкцией, которую я часто использую вместо тернарной с нулевыми значениями, является оператор объединения с нулевым значением. который также защищает вас от нулей. Для ToString () это не обязательно (как вы указали), но для значений int по умолчанию (например) он отлично работает, например:

int page = currentPage ?? 1;

, который позволяет вам выполнять все целочисленные операции на странице без первой явной проверки на null и вызова для значения в currentPage (где currentPage - это целое число? Возможно, передается как параметр)

5
ответ дан 23 November 2019 в 23:22
поделиться

Может быть, это просто следование шаблону? Или они не знают бэкенд. Вы правы, код точно такой же. Вы даже можете сделать:

int? i = null;
i.ToString(); //No NullReferenceException
3
ответ дан 23 November 2019 в 23:22
поделиться
Другие вопросы по тегам:

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