2010-03-22 12 views
2

Ceci est le cas. Je reçois la date du contrôle DatePicker:Valeur de date/heure nullable à partir de DatePicker

DateTime current = datePicker1.SelectedDate;

Et j'obtiens une erreur: Impossible de convertir DateTime? à DateTime. Donc je suppose que c'est à un type nullable DateTime ?.

Est-il sûr de jeter ce type à un type que j'ai besoin comme ceci:

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

Et en général, quand est-il sûr de jeter implicitement les valeurs nullables, et quand il est pas?

Répondre

4

Les types nullables ont une propriété spéciale pour ce genre de pensée. C'est HasValue, et de plus GetValueOrDefault. Donc ce que vous avez vraiment besoin est

DateTimePicker1.SelectedDate.GetValueOrDefault(DateTime.Now); 

// or DateTime.MaxValue or whatever).

+0

merci pour une info supplémentaire, c'est utile aussi – trnTash

+0

Merci beaucoup luckeyluke. :) – IsmailS

0

Vous n'avez pas besoin de jeter, les éléments suivants

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

devrait faire

+0

selon MSND, datePicker1.SelectedDate.Value est la même que (DateTime) datePicker1.SelectedDate. Les deux appartiennent à des conversions explicites – trnTash

0

Que diriez-vous

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

?

4

Dans ce cas, vous devez utiliser le null coalescing operator:

current = datePicker1.SelectedDate ?? DateTime.Now; 

qui utilisera SelectedDate si elle est non nulle, ou DateTime.Now autrement. Le type de l'expression est non nullable, car le dernier opérande est.

En général, vous devez utiliser la propriété Value (ou coulée du type non annulable) si vous êtes confiant que la valeur est non nulle à ce moment - de telle sorte que si elle est nulle, il sera jeter une exception. (Si vous avez perdu votre confiance, une exception est appropriée.) Très souvent, l'opérateur de coalescence nul signifie que vous n'avez pas à vous en préoccuper.

+0

cela a fonctionné. merci pour une réponse rapide! – trnTash