새로운 DateTime () 대 기본값 (DateTime)


196

이것들 중 하나를 다른 것보다 선택해야 할 이유가 있습니까?

DateTime myDate = new DateTime();

또는

DateTime myDate = default(DateTime);

둘 다 동일 1/1/0001 12:00:00 AM합니다.


28
어느 것과 동일 DateTime.MinValue하므로 다음과 같이 할 수도 있습니다 DateTime myDate = DateTime.MinValue: /
Lloyd

20
@Lloyd 대부분의 경우 ...하지만 기본 매개 변수는 아닙니다 DateTime.MinValue는 컴파일 시간 상수가 아니지만 default (DateTime) / new DateTime ()입니다.
Ricibob

12
@Ricibob의 훌륭한 의견을 명확히하기 위해 중요하기 때문에 선택적 매개 변수를 사용하여 메소드를 작성하는 경우 default(DateTime)또는 중 하나만 사용할 수 있습니다 new DateTime(). 이들은 선택적 매개 변수 값에 필요한 컴파일 시간 상수 입니다. 컴파일 시간 상수가 필요하지 않은 경우 default(DateTime), new DateTime()DateTime.MinValue교환 할 수있다.
leanne

답변:


200

아니요, 동일합니다.

default(), 모든 값 유형 ( DateTime값 유형)에 대해 항상 매개 변수없는 생성자를 호출합니다.


29
FWIW; C # 6에서는이 동작이 변경됩니다. C # 6에는 구조체에 대한 매개 변수가없는 생성자 가 도입 되어 동작과 수행 방식 new이 다를 default(T)수 있습니다.
vcsjones

30
하나는이 주장 할 수 default(DateTime)일반적으로, 따라서 더 유리한 프로그래머의 의도를 더 설명이다.
intrepidis

16
그러나 @vcsjones는 C # 6.0의 최종 릴리스 전에 제거되었습니다.
nawfal

5
@nawfal 그래. 아마 그것도 최고였습니다.
vcsjones

이 대답은 틀린 IMO입니다. 두 가지가 의미 적으로 동일하지만 둘 다 생성자를 호출하지 않습니다. 두 구문 옵션 모두 사용initobj
Marc Gravell

22

메서드에서 DateTime 매개 변수에 기본값을 사용하려면 default (DateTime) 만 사용할 수 있습니다.

다음 줄은 컴파일되지 않습니다 :

    private void MyMethod(DateTime syncedTime = DateTime.MinValue)

이 줄은 다음과 같이 컴파일됩니다 :

    private void MyMethod(DateTime syncedTime = default(DateTime))

3
물론 DateTime.MinValue는 컴파일되지 않습니까? 선택적 매개 변수는 컴파일 시간 상수 여야하며, MinValue는 그렇지 않습니다. 기본 (날짜 시간) 새로운 날짜 시간 ()는 모두 유효하지만 있습니다 (const를 날짜 시간 X = 기본 (날짜 시간)이 올바르지 않기 때문에 날짜 시간 값이 컴파일시 상수로 선언 할 수 없기 때문에, 재미있는 사실이다).
제리 Kangasniemi

16

내 대답은 아니오 야. 두 경우 모두 mdDate.Kind = DateTimeKind.Unspecified.

따라서 다음을 수행하는 것이 좋습니다.

DateTime myDate = new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc);

myDate.Kind속성은 읽기 전용이므로 생성자가 호출 된 후에는 변경할 수 없습니다.


2
OP의 질문에 어떻게 대답합니까?
Mo Patel

46
내 대답의 처음 4 단어를 참조하십시오.
벤 C

4
나는 이것에 반대한다. 기본값 DateTime은에 대한 간단한 비교와 함께 설정되지 않은 값으로 유용합니다 default(DateTime). 기본값이 아닌 용도는 무엇입니까 01/01/0001?
롤링

DateTimeKind.UTC 대신 DateTimeKind.Utc입니다.
Roberto

@Roberto 감사합니다.
jpaugh

-3

그것을 이해하는 가장 간단한 방법은 DateTime이 구조체라는 것입니다. 구조체를 초기화하면 최소값으로 초기화됩니다.DateTime.Min

따라서간에 차이가 없다 default(DateTime)하고 new DateTime()DateTime.Min


3
아니요, 구조체가 반드시 최소값으로 초기화 되지않습니다 . 그들은 모든 비트가 0으로 초기화됩니다. 음수 일 수있는 숫자 유형과 같은 일부 유형의 경우 가장 낮은 값이고, 최소값에 가까운 곳은 없습니다. 물론, 다른 것들은 여전히 ​​비교할 수없고 "최소한"값을 갖지 않을 입니다.
Servy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.