Укажите значение по умолчанию для ссылочного типа - PullRequest
19 голосов
/ 01 ноября 2010

Как я понимаю, default (объект), где 'object' - это любой ссылочный тип, всегда возвращает ноль, но могу ли я указать, что такое по умолчанию?Например, я хочу default (object) == new object ();

Ответы [ 2 ]

30 голосов
/ 01 ноября 2010

Нет.default(type) всегда будет возвращать одно и то же - версию этого типа с нулевым значением.Для ссылочного типа это дескриптор объекта, который всегда имеет значение ноль - что равно null.Для типа значения это всегда структура со всеми элементами, установленными на ноль.

Нет способа переопределить это поведение - спецификация языка разработана таким образом.


Редактировать: Что касается вашего комментария:

Просто чтобы иметь возможность сказать FirstOrDefault() и никогда не получать ноль.

Я бы не рекомендовал это ни в коем случае.Пользователи ожидают, что FirstOrDefault() вернет null в случае ошибки.Было бы лучше написать свой собственный метод расширения:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new()
{
     return sequence.FirstOrDefault() ?? new T();
} 
7 голосов
/ 01 ноября 2010

Извините, я не Джон Скит ...

Но в любом случае, ответ "нет, вы не можете"

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