Что равно DateTime.MinValue, так что вы могли бы просто DateTime myDate = DateTime.MinValueтак же: /
Ллойд
20
@Lloyd Большую часть времени ... но не как параметр по умолчанию DateTime.MinValue не является постоянной времени компиляции - но по умолчанию (DateTime) / new DateTime () это.
Ричибоб
12
Просто чтобы прояснить отличный комментарий @ Ricibob, потому что это важно: если вы создаете метод с необязательным параметром, вы можете использовать ТОЛЬКО либо, default(DateTime)либо new DateTime(). Это обе константы времени компиляции , необходимые для необязательных значений параметров. Если компиляции константы времени не требуется, то default(DateTime), new DateTime()и DateTime.MinValueявляются взаимозаменяемыми.
Линн
Ответы:
200
Нет, они идентичны.
default(), для любого типа значения ( DateTimeэто тип значения) всегда будет вызывать конструктор без параметров.
FWIW; В C # 6 это поведение изменится. C # 6 вводит конструкторы без параметров для структур, которые позволяют поведению newотличаться от того, что default(T)будет делать.
vcsjones
30
Можно утверждать, что default(DateTime)это более наглядно описывает намерения программиста, поэтому обычно более благоприятно.
Intrepidis
16
@vcsjones это было удалено до финальной версии C # 6.0.
Nawfal
5
@nawfal Да. Наверное, лучше, чем когда-либо.
vcsjones
Этот ответ просто неправильный IMO: эти две вещи семантически идентичны, но ни одна из них не вызывает конструктор - обе опции синтаксиса используютinitobj
Марк Гравелл
22
Если вы хотите использовать значение по умолчанию для параметра DateTime в методе, вы можете использовать только default (DateTime).
Конечно DateTime.MinValue не компилируется? Необязательные параметры должны быть константами времени компиляции, а MinValue - нет. хотя по умолчанию (DateTime) и новый DateTime () действительны (что на самом деле забавно, потому что const DateTime x = default (DateTime) недопустим, поскольку значения DateTime не могут быть объявлены как константы времени компиляции)
Джерри Кангасниеми,
16
Ответ - нет. Имейте в виду, что в обоих случаях mdDate.Kind = DateTimeKind.Unspecified.
Пожалуйста, посмотрите первые 4 слова моего ответа.
Бен С
4
Я бы поспорил против этого. Значение по умолчанию DateTimeполезно в качестве значения, не установленного, с простым сравнением с default(DateTime). Какой 01/01/0001смысл использовать значение не по умолчанию ?
Роулинг
Имейте в виду, что это DateTimeKind.Utc вместо DateTimeKind.UTC
Роберто
@ Роберто Спасибо, исправлено.
jpaugh
-3
Самый простой способ понять это - DateTime - это структура. Когда вы инициализируете структуру, она инициализируется до минимального значения:DateTime.Min
Поэтому нет никакой разницы между default(DateTime)и new DateTime()иDateTime.Min
Нет, структуры не обязательно инициализируются до их минимального значения. Они инициализируются, чтобы все биты были равны нулю. Для некоторых типов это их самое низкое значение, для других, таких как числовые типы, которые могут быть отрицательными, это не близко к их минимальному значению. И, конечно, другие все равно не будут сопоставимы и не будут иметь «минимального» значения.
DateTime.MinValue
, так что вы могли бы простоDateTime myDate = DateTime.MinValue
так же: /default(DateTime)
либоnew DateTime()
. Это обе константы времени компиляции , необходимые для необязательных значений параметров. Если компиляции константы времени не требуется, тоdefault(DateTime)
,new DateTime()
иDateTime.MinValue
являются взаимозаменяемыми.Ответы:
Нет, они идентичны.
default()
, для любого типа значения (DateTime
это тип значения) всегда будет вызывать конструктор без параметров.источник
new
отличаться от того, чтоdefault(T)
будет делать.default(DateTime)
это более наглядно описывает намерения программиста, поэтому обычно более благоприятно.initobj
Если вы хотите использовать значение по умолчанию для параметра DateTime в методе, вы можете использовать только default (DateTime).
Следующая строка не скомпилируется:
Эта строка скомпилирует:
источник
Ответ - нет. Имейте в виду, что в обоих случаях
mdDate.Kind = DateTimeKind.Unspecified
.Поэтому может быть лучше сделать следующее:
myDate.Kind
Свойство только для чтения, поэтому он не может быть изменен после того , как конструктор вызывается.источник
DateTime
полезно в качестве значения, не установленного, с простым сравнением сdefault(DateTime)
. Какой01/01/0001
смысл использовать значение не по умолчанию ?Самый простой способ понять это - DateTime - это структура. Когда вы инициализируете структуру, она инициализируется до минимального значения:
DateTime.Min
Поэтому нет никакой разницы между
default(DateTime)
иnew DateTime()
иDateTime.Min
источник