L'opérateur '??' ne peut pas être appliquée à des opérandes de type 'System.DateTime'
J'obtiens l'erreur suivante :
Operator '??' cannot be applied to operands of type 'System.DateTime'
foreach (EndServReward r in reward)
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
myIfxCmd.Parameters[0].Value = r.EmpNum ;
myIfxCmd.Parameters[1].Value = (r.ServDate) ?? DBNull.Value;
}
où reward is List<EndServReward> reward
,pourquoi cela se produit et comment le résoudre ?
Vous devez vous connecter pour publier un commentaire.
??
est null-coalescence de l'opérateur.Il n'est pas judicieux de l'appliquer à une valeur qui ne peut pas être
null
.r.ServDate
ne peut pas êtrenull
?!! je veux vérifier si ceux-ci sont vides propriétés ou non (rempli) avec des valeursDateTime
est une structure qui est garanti pour être initialisé avec tous les zéros. Tous les zéros est égal àDateTime.MinValue
(0000-01-01) qui est ce qui doit être inséré dans la base de données.datetime
colonne. Il rejettera un DateTime.MinValue (0001-01-01)DateTime.MinValue
est "ce qui va être tenté d'être inséré dans la base de données."La nullcoalescing opérateur ne peut pas être appliqué par défaut sur un type qui est par nature non nullable comme
DateTime
. Si vous souhaitez l'utiliser de toute façon, vous aurez à prévoir à l'aide deDateTime
comme type nullable, par exemple à l'aideDateTime? dt;
Votre r.ServDate propriété doit être nullable:
DateTime par défaut n'est pas nullable
DateTime est un ValueType. Type de valeur ne sont pas les valeurs null - ils toujours avoir un peu de valeur.
C'est la même chose pour les entiers, double, etc.
L'Opérateur que vous utilisez vérifie si la valeur est nulle, de sorte qu'il n'est pas nécessaire.
Cependant, vous pourriez envisager de la vérification de la valeur par rapport à une valeur de base, comme Min. Vous avez fait de considérer ce qui est la valeur par défaut de cette variable, si c'est acceptable, et puis la vérifier.
Encore une fois, considérer un int. Vous n'avez pas le vérifier par rapport à null, mais vous pouvez vérifier contre zéro ou négatifs.
Vous pouvez modifier le type nullable comme suggéré dans d'autres réponses, ou ajouter une méthode d'assistance comme ce à votre code:
Modifiez le code à ceci:
Comme l'a souligné à juste titre dans d'autres réponses vous ne pouvez pas utiliser la valeur Null-Coalescence de l'opérateur sur une valeur de type DateTime.
Avant d'essayer d'attribuer
myIfxCmd.Parameters[1].Value
avecNull
. Première question est: qu'est-ce que vous définissez la valeur par défaut deServDate
propriété dansEndServReward
Classe? Plutôt de faire la conversion, ànull
ouDateTime.Min
mieux définir une valeur par défaut pourServData
lorsque vous créez l'objet lui-même. Cela aidera à décider de la fonctionnalité en un seul endroit et de fournir une solution cohérente.Vous pouvez soit choisir comme
DateTime.Min
ouNull
lorsque vous créez ce plutôt qu'au point de le mettre à jour de la base de données.