2017-01-24 3 views
1

Mon type ProcessDate est DateTime? lorsque j'utilise ToString il montre cette exception.Méthode "ToString" de DateTime? a 0 paramètre (s) mais est invoqué avec 1 argument (s)

dfCalPlanDate.Text = concreteCalPlan.ProcessDate.ToString("d"); 

Nous vous remercions de votre intérêt.

+0

Dépend de l'origine de ProcessDate, un champ provient d'une requête db? – BugFinder

+1

Essayez avec ProcessDate.Value.ToString –

+1

@BugFinder seul le type importe, pas d'où il vient. Comme l'OP l'a déjà mentionné, c'est un 'DateTime?' –

Répondre

6

simple: Nullable<T> (et, par conséquent, Nullable<DateTime>, alias DateTime?) n'a pas une méthode ToString(String).

Vous avez probablement voulu appeler DateTime.ToString(String). Pour ce faire, d'une manière nul en toute sécurité, vous pouvez utiliser C# 6 de null-conditional operator?.:

dfCalPlanDate.Text = concreteCalPlan.ProcessDate?.ToString("d"); 

qui est une manière concise de l'écriture:

var date = concreteCalPlan.ProcessDate; 
dfCalPlanDate.Text = (date == null ? null : date.ToString("d")); 

Notez que cela donné null si ProcessDate est null . Vous pouvez ajouter l'opérateur null-coalescent ?? si vous avez besoin un autre résultat dans ce cas:

dfCalPlanDate.Text = concreteCalPlan.ProcessDate?.ToString("d") ?? "no date set"; 
+0

Cela fonctionnera seulement avec ** C# 6 ** qui devrait être indiqué dans votre réponse. –

+0

@ m.rogalski C# 6 n'est pas "seulement". D'ailleurs, le point de réponse est que l'on doit accéder à 'Value'. L'utilisation de la syntaxe actuelle concise est en fait un bonus –

+0

@ m.rogalski: Selon vous, quelle devrait être la version C# la plus basse que je puisse supposer sans la mentionner explicitement? – Heinzi

3

ProcessDate est pas un DateTime. ProcessDate.Value est. Vous devez faire:

dfCalPlanDate.Text = concreteCalPlan.ProcessDate.Value.ToString("d"); 

N'oubliez pas de vérifier si le DateTime? a une valeur en premier.

+0

if (concretePlan.ProcessDate! = null) dfCalPlanDate.Text = concreteCalPlan.ProcessDate.Value.ToString ("d"); c'est utile merci. – Ilaria