답변:
C #에 값이 할당되지 않은 변수를 갖는 유일한 방법은 변수가 로컬 변수가되는 것입니다.이 경우 컴파일 타임에 변수를 읽으려고 시도하여 변수가 지정되지 않았다는 것을 알 수 있습니다. )
나는 당신이 정말로 원한다고 생각합니다 Nullable<DateTime>
(또는 DateTime?
C # 구문 설탕으로)-그것을 null
시작한 다음 정상적인 DateTime
값 을 지정하십시오 (적절하게 변환 될 것입니다). 그런 다음 "실제"값이 설정되어 있는지 확인 null
하기 위해 HasValue
속성을 사용하거나 비교할 수 있습니다 .
default(DateTime)
와 처음부터 그런 방식으로 이루어진 분야의 차이를 알려주지 않습니다 . 기본적으로 도메인 내에서 하나의 값을 "특별하고 정상적인 사용에는 사용할 수 없음"으로 취급하고 있습니다.
당신은 그렇게 의미합니까?
DateTime datetime = new DateTime();
if (datetime == DateTime.MinValue)
{
//unassigned
}
또는 Nullable을 사용할 수 있습니다
DateTime? datetime = null;
if (!datetime.HasValue)
{
//unassigned
}
이것을 어딘가에 넣으십시오 :
public static class DateTimeUtil //or whatever name
{
public static bool IsEmpty(this DateTime dateTime)
{
return dateTime == default(DateTime);
}
}
그때:
DateTime datetime = ...;
if (datetime.IsEmpty())
{
//unassigned
}
IsEmpty
메서드가 true를 반환합니다.이 값은 비어 있지 않기 때문에 원하는 값 이 아닐 수 있습니다. 기본값이 할당되었습니다. 나는 당신의 방법의 이름이로 더 적합하다고 생각 IsDefaultValue
합니다. nullable이 아닌 DateTime을 실제로 가질 수는 없습니다 IsEmpty
.
IsDefaultValue
더 좋았을 것입니다
할당되지 않은 날짜 시간에 대한 GetHashCode ()가 항상 0이라는 것을 알았습니다. 이 동작이 표시되는 이유에 대한 문서를 찾을 수 없기 때문에 이것이 null 날짜 시간을 확인하는 좋은 방법인지 확실하지 않습니다.
if(dt.GetHashCode()==0)
{
Console.WriteLine("DateTime is unassigned");
}
GetHashCode
눈금으로 인해 0을 반환합니다 (DateTime의 내부 표현)도 0과 같습니다 unchecked((int)ticks) ^ (int)(ticks >> 32);
. 해시 코드는 다음과 같은 방법으로 계산됩니다 . 참조 : referencesource.microsoft.com/#mscorlib/system/datetime.cs,836
기본값은 항상 new DateTime()
입니다. 그래서 우리는 쓸 수 있습니다
DateTime datetime;
if (datetime == new DateTime())
{
//unassigned
}