Подтвердить что ты не робот

Невозможно неявно преобразовать тип 'System.DateTime?' to 'System.DateTime'. Явное преобразование существует

Я пытаюсь преобразовать datetime? todatetime, но я получаю эту ошибку:

Ошибка 7 Невозможно неявно преобразовать тип 'System.DateTime?' в 'System.DateTime. Явное преобразование существует

Вот мой код:

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;
}
4b9b3361

Ответ 1

У вас есть 3 варианта:

1) Получить значение по умолчанию

dt = datetime??DateTime.Now;

он назначит DateTime.Now (или любое другое значение, которое вы хотите), если datetime имеет значение null

2) Проверьте, содержит ли datetime значение и если не возвращает пустую строку

if(!datetime.HasValue) return "";
dt = datetime.Value;

3) Замените подпись метода на

public string ConvertToPersianToShow(DateTime  datetime)

Все потому, что DateTime? означает, что он равен нулю datetime, поэтому перед назначением datetime вам нужно проверить, содержит ли оно значение и только потом назначить.

Ответ 2

dt nullable вам нужно получить доступ к его Value

if (datetime.HasValue)
    dt = datetime.Value;

Важно помнить, что это может быть NULL. Вот почему структура nullable имеет свойство HasValue, которое сообщает вам, что это NULL или нет.

Вы также можете использовать null-coalescing operator ??, чтобы назначить значение по умолчанию

dt = datetime ?? DateTime.Now;

Это назначит значение справа, если значение слева NULL

Ответ 3

вы должны использовать параметр .Value параметра datetime. Все Nullable structs имеют свойство value, которое возвращает конкретный тип объекта. но вы должны проверить, имеет ли он значение null раньше, иначе вы получите ошибку времени выполнения.

то есть:

datetime.Value

но проверьте, имеет ли он значение сначала!

if (datetime.HasValue)
{
   // work with datetime.Value
}

Ответ 4

Проблема заключается в том, что вы передаете тип с нулевым значением в тип, не содержащий NULL.

Вы можете выполнить любое из следующих решений:

а. Объявите свой dt как обнуляемый

DateTime? dt = dateTime;

В. Используйте свойство Value для DateTime? datetime

DateTime dt = datetime.Value;

С. Вставить его

DateTime dt = (DateTime) datetime;