L'attribution `null`, la valeur à prendre la valeur null<DateTime> avec une seule ligne de "si"
J'ai une Classe comme ça
public class MyClass
{
public int Id { get; set; }
public Nullable<DateTime> ApplicationDate { get; set; }
....
}
Maintenant je suis en train de remplir un objet de MyClass
comme ce
DataTable dt = DBHelper.GetDataTable(sql, conn);
DataRow dr = dt.Rows[0];
MyClass oMyClass = new MyClass();
oMyClass.Id = (int)dr["Id"];
oMyClass.ApplicationDate = dr["ApplDate"] == DBNull.Value ? null : Convert.ToDateTime(dr["AppDate"]);
//Above line gives an error
....
L'attribution de la Date de la Demande de valeur donne une erreur
Type of conditional expression cannot be determined because there is no implicit conversion between '<null>' and 'System.DateTime'
Ce qui me manque ici?
OriginalL'auteur Nalaka526 | 2012-10-12
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de jeter
null
àDateTime?
:C'est à cause de la façon dont le compilateur détermine le type résultant de la opérateur conditionnel; le comportement est voulu par la conception:
Depuis
null
par lui-même est de type null et donc il n'y a pas de conversion à partir de ou vers elle, vous avez besoin pour aider le compilateur par la coulée.null
être coulé? Il semble que le message d'erreur se rapporte ànull
etSystem.DateTime
.Oui
null
est ce qui doit être jeté, mon mauvais.Je reçois
Nullable object must have a value
quand on fait quelque chose de similaire à ceci et ces réponses sur cette page, y compris la(DateTime?)null
exprimés.cela doit signifier "quelque chose de semblable à ce" est incorrect alors. Par exemple, vous ne pouvez pas aveuglément l'accès
Value
sur l'objet, c'est l'ensemble de point deNullable<T>
.La seule différence est que j'étais le test d'une chaîne de caractères vide, au lieu de
dr["ApplDate"] == DBNull.Value
. Tout le reste est le même. S'est avéré qu'il était de frapper sur une ligne après elle, cependant, où j'ai été affectation de ma variable est.Value
(ma équivalent de laDateTime<Nullable> ApplicationDate
ci - dessus, je viens d'appeler d'un autre nom) à uneOracleParameter
pour monOracleCommand
, qui était deOracleDbType.Date
et le champ de base de données a été, en effet, configuré pour accepter les valeurs null. Mais j'ai trouvé ce qui se passait. Vous ne pouvez pas affecter(DateTime?)null
un OracleDATE
le terrain, il doit êtreDBNull.Value
.OriginalL'auteur Jon
Tous le compilateur sait, c'est que d'une chose donne un
null
et l'autre donne unDateTime
. Le compilateur se plaint parce qu'il ne peut pas convertir de l'un à l'autre, donc c'est à vous de les jeter à quelque chose qui peut être à la fois des valeurs.Noter que
DateTime?
est court pourNullable<DateTime>
.Notez également que vous avez seulement besoin d'exprimer la valeur null comme il y a une conversion implicite entre
DateTime?
etDateTime
sorte que le compilateur peut faire la conversion de son auto.OriginalL'auteur George Duckett
essayez ceci:
Vous pouvez également appliquer le casting de la dernière expression.
OriginalL'auteur Botz3000
Vous aurez besoin de les convertir "null" dans Nullable
Essayez ce code:
OriginalL'auteur KaR
Vous pouvez utiliser
default
qui va affecter la valeur par défaut de " non initialisé Type.Plus d'exemples
OriginalL'auteur civilator
ou
OriginalL'auteur Hardik