Impossible de convertir implicitement le type ' Système.DateTime? système "à".DateTime". Une conversion explicite existe
J'essaie de convertir datetime? todatetime mais j'obtiens cette Erreur:
Erreur 7 ne peut pas convertir implicitement le type ' Système.DateTime?' de "Système.DateTime". Une conversion explicite existe
Voici mon code:
public string ConvertToPersianToShow(DateTime? datetime)
{
DateTime dt;
string date;
dt = datetime;
string year = Convert.ToString(persian_date.GetYear(dt));
string month = Convert.ToString(persian_date.GetMonth(dt));
string day = Convert.ToString(persian_date.GetDayOfMonth(dt));
if (month.Length == 1)
{
month = "0" + Convert.ToString(persian_date.GetMonth(dt));
}
if (day.Length == 1)
{
day = "0" + Convert.ToString(persian_date.GetDayOfMonth(dt));
}
//date = Convert.ToString(persian_date.GetYear(dt)) + "/" +
Convert.ToString(persian_date.GetMonth(dt)) + "/" +
//Convert.ToString(persian_date.GetDayOfMonth(dt));
date = year + "/" + month + "/" + day+"("+dt.Hour+":"+dt.Minute+")";
return date;
}
4 réponses
Vous avez 3 options:
1) Récupère la valeur par défaut
dt = datetime??DateTime.Now;
Il affectera DateTime.Now
(ou toute autre valeur que vous voulez) si datetime
est null
2) Vérifiez si datetime contient une valeur et si ce n'est pas le cas, renvoyez une chaîne vide
if(!datetime.HasValue) return "";
dt = datetime.Value;
3) Changer la signature de la méthode en
public string ConvertToPersianToShow(DateTime datetime)
C'est parce que DateTime?
signifie qu'il est nullable DateTime
donc avant de l'assigner à DateTime
Vous devez vérifier s'il contient de la valeur et ensuite seulement assigner.
dt
est nullable
vous avez besoin pour accéder à ses Value
if (datetime.HasValue)
dt = datetime.Value;
Il est important de se rappeler que cela peut être NULL
. C'est pourquoi la structure nullable
a la propriété HasValue
qui vous indique si elle est NULL
ou non.
, Vous pouvez également utiliser l'null-coalescing operator
??
pour affecter une valeur par défaut
dt = datetime ?? DateTime.Now;
Cela affectera la valeur à droite si la valeur à gauche est NULL
Le problème est que vous passez un type nullable à un type non nullable.
Vous pouvez faire l'une des solutions suivantes:
A. Déclarez votre {[0] } comme nullable
DateTime? dt = dateTime;
B. Use Value
propriété du DateTime? datetime
DateTime dt = datetime.Value;
C. lancez-le
DateTime dt = (DateTime) datetime;
Vous devriez utiliser le .Valeur du paramètre datetime. Toutes les structures Nullable ont une propriété value qui renvoie le type concret de l'objet. mais vous devez vérifier s'il est null à l'avance sinon vous obtiendrez une erreur d'exécution.
C'est-à-dire:
datetime.Value
Mais vérifiez s'il a une valeur en premier!
if (datetime.HasValue)
{
// work with datetime.Value
}