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;
}
27
demandé sur M.R.Safari 2013-11-14 12:36:42

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.

36
répondu wudzik 2013-11-14 08:38:46

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 nullablea 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

15
répondu David Pilkington 2017-01-18 10:10:31

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;

2
répondu dr.Crow 2016-06-06 10:07:29

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
}
1
répondu Ahmed ilyas 2013-11-14 08:38:25