2010-03-22 4 views
2

이 경우입니다. DatePicker 컨트롤에서 날짜를 얻습니다.DatePicker의 Nullable datetime 값

DateTime current = datePicker1.SelectedDate;

그리고 오류가 발생합니다. 암시 적으로 DateTime을 변환 할 수 없습니까? ~ DateTime. 그래서 그것은 nullable 타입 DateTime까지인가?. 때 암시 적으로 널 (NULL) 값을 캐스팅하는 것이 안전합니다, 그것은하지 않을 때,

if (datePicker1.SelectedDate == null) 
    current= DateTime.Now; 
else 
    current= (DateTime)datePicker1.SelectedDate; //or datePicker1.SelectedDate.Value 

그리고 일반적으로 :

는 내가이 같은 필요 유형이 유형을 캐스팅 안전한가요?

답변

4

Nullable 유형은 이러한 종류의 사고에 특별한 속성이 있습니다. HasValue 및 GetValueOrDefault입니다. 그래서 정말로 필요한 것은

DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now); 

// or DateTime.MaxValue or whatever)입니다.

+0

추가 정보를 주셔서 감사합니다. 유용합니다. – trnTash

+0

감사합니다. luckeyluke. :) – IsmailS

0

당신은

+0

MSND에 따라 datePicker1.SelectedDate.Value는 (DateTime) datePicker1.SelectedDate와 동일합니다. 이 두 가지 모두 명시적인 변환 – trnTash

0

방법에 대한

DateTime current = datePicker1.SelectedDate ?? DateTime.Now; 

을해야

if (datePicker1.SelectedDate == null) 
    current= DateTime.Now; 
else 
    current= datePicker1.SelectedDate.Value; 

다음 캐스트 할 필요가 없습니다?

4

는이 경우 사용해야 null coalescing operator : 그것은 그렇지 않으면 null 이외의, 또는 DateTime.Now 경우 SelectedDate를 사용합니다

current = datePicker1.SelectedDate ?? DateTime.Now; 

. 마지막 피연산자가이기 때문에 식의 형식은 nullable이 아닙니다. 당신이 값이 그 시점에서 null이 아닌 것을 확신하는 경우

는 일반적으로, 당신은 Value 속성을 사용한다 (또는 비 nullable 형식으로 캐스팅) - 그것은 NULL의 경우 그, 그 것 때문에 예외를 throw합니다. (확신이 잘못되어 있다면, 예외가 적절합니다.) 종종 널 통합 연산자는 당신이 이것에 대해 걱정할 필요가 없다는 것을 의미합니다.

+0

에 속합니다. 빠른 답변 주셔서 감사합니다! – trnTash