2013-09-02 5 views
0

У меня есть свойство DOB, определенный в моем классе, как член обнуляемого DateTime ?:Nullable DateTime? чтобы DateTime Convertion не работает

public DateTime? DOB 
{ 
    get 
    { 
     var o = base.GetPropertyValue("memberDOB"); 
     if (o == DBNull.Value) 
     { 
      return null; 
     } 
     return (DateTime?)o; 
    } 
    set 
    { 
     base.SetPropertyValue("memberDOB", value); 
    } 
} 

Когда значение равно нулю, и я стараюсь, чтобы проверить, если это обнуляемым - это просто твердит бросок не является действительным:

if((DateTime)_currentProfile.DOB == null) 
    txtDOB.Text = _currentProfile.DOB.ToString(); 

Я попытался с

TryParse(_currentProfile.DOB.ToString(), out dob) 

_currentProfile.DOB == null 

_currentProfile.DOB.ToString() 

(DateTime)_currentProfile.DOB 

Ни один из них работать - он всегда говорит литая недействителен.

Не совсем понимаю, почему.

Любые идеи? Спасибо

ответ

-1

Вы литье до DateTime, что является value type и не может быть null, когда-либо.

Cast к DateTime?, если вы хотите проверить null, или, вернее, не отбрасывают, но проверить прямо на него:

if(_currentProfile.DOB.HasValue) 
    txtDOB.Text = _currentProfile.DOB.ToString(); 

Обратите внимание, что если есть значение вы можете использовать его. Ваш исходный код кажется обратным.

+0

Или: if (_currentProfile.DOB! = Null) –

+0

@SteveWellens - Конечно, но если у вас уже есть «Nullable », возможно также использовать встроенную семантику. – Oded

+0

Конечно, но если вы решите сделать что-то недействительным, вы можете использовать его как нечто, что может иметь значение null. –

0

Вы не должны просто отливать Nullable DateTime в DateTime вот так. Он сломается, когда он будет равен нулю.

Используйте DateTime.HasValue и DateTime.Value, если он вернется.

Смежные вопросы