web-dev-qa-db-fra.com

Comment définir DateTime sur null

Utilisation de C #. J'ai une chaîne dateTimeEnd.

Si la chaîne est au bon format, je souhaite générer un DateTime et l'assigner à eventCustom.DateTimeEnd de type

public Nullable<System.DateTime> DateTimeEnd { get; set; }

Si dateTimeEnd est nul ou vide, j'ai besoin de eventCustom.DateTimeEnd défini sur null.

J'essaie d'y parvenir en utilisant le code suivant mais j'obtiens toujours null pour eventCustom.DateTimeEnd.

Pourriez-vous s'il vous plaît m'aider à définir ce qui ne va pas dans mon code?

   DateTime? dateTimeEndResult;
     if (!string.IsNullOrWhiteSpace(dateTimeEnd))
        dateTimeEndResult = DateTime.Parse(dateTimeEnd);


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
40
GibboK

On dirait que tu veux juste:

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
    ? (DateTime?) null
    : DateTime.Parse(dateTimeEnd);

Notez que cela lève une exception si dateTimeEnd n'est pas une date valide.

Une alternative serait:

DateTime validValue;
eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue)
    ? validValue
    : (DateTime?) null;

Cela va maintenant définir le résultat à null si dateTimeEnd n'est pas valide. Notez que TryParse traite null comme une entrée sans aucun problème.

102
Jon Skeet

DateTime est un type de valeur non nullable

DateTime? newdate = null;

Vous pouvez utiliser un Nullable<DateTime>

c # date Nullable

13
Rahul

Cette ligne:

eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;

est identique à:

eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult);

parce que l'opérateur conditionnel ? a une priorité plus élevée que l'opérateur d'affectation =. C'est pourquoi vous obtenez toujours null pour eventCustom.DateTimeEnd. ( MSDN Ref )

3
Fung

Cela devrait fonctionner:

if (!string.IsNullOrWhiteSpace(dateTimeEnd))
    eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
else
    eventCustom.DateTimeEnd = null;

Notez que cela lève une exception si la chaîne n’est pas au format correct.

3
Matthew Watson

Vous pouvez écrire DateTime? newdate = null;

1
Subhash Jakhar

Maintenant, je ne peux pas utiliser DateTime?, J'utilise DBNull.Value pour tous les types de données. Ça marche très bien.

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
  ? DBNull.Value
  : DateTime.Parse(dateTimeEnd);
0
Fox Vĩnh Tâm