Для типов значений нет разницы, так как конструктор по умолчанию для типа значения всегда эквивалентен значению по умолчанию (T).Он просто заполняет все значениями 0
, null
, 0.0
... В стандартной реализации .net это просто соответствует заполнению всего в вашей переменной двоичным нулем.
Для ссылочных типов new T()
вызывает конструктор по умолчанию и возвращает (обычно) ненулевую ссылку.default(T)
, с другой стороны, эквивалентно null
в этом случае.
default(T)
важно, поскольку оно представляет действительное значение T, независимо от того, является ли T ссылочным типом или типом значения.Это очень полезно в общем программировании.Например, в таких функциях, как FirstOrDefault
, вам нужно правильное значение для вашего результата в случае, когда в перечисляемом нет записей.И вы просто используете default(T)
для этого, так как это единственное, что действительно для каждого типа.
Кроме того, для вызова конструктора по умолчанию для ссылочных типов требуется общее ограничение.И не каждый ссылочный тип реализует конструктор по умолчанию.Так что вы не всегда можете его использовать.