c# - objeto - No se puede convertir implícitamente el tipo ''System.DateTime?'' a ''System.DateTime''. Existe una conversión explícita
no se puede convertir implícitamente el tipo system datetime ?'' en system datetime (4)
Debería utilizar el .Value del parámetro datetime. Todas las estructuras anulables tienen una propiedad de valor que devuelve el tipo concreto del objeto. pero debe verificar si es nulo de antemano, de lo contrario obtendrá un error de tiempo de ejecución.
es decir:
datetime.Value
¡Pero compruebe si tiene un valor primero!
if (datetime.HasValue)
{
// work with datetime.Value
}
Estoy tratando de convertir datetime? Todatetime pero me sale este error:
Error 7 No se puede convertir implícitamente el tipo ''System.DateTime?'' a ''System.DateTime''. Existe una conversión explícita
Aquí está mi código:
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;
}
El problema es que está pasando un tipo anulable a un tipo no anulable.
Puedes hacer cualquiera de las siguientes soluciones:
A. Declara tu dt
como anulable
DateTime? dt = dateTime;
B. ¿Utilizar la propiedad Value
del DateTime? datetime
DateTime? datetime
DateTime dt = datetime.Value;
C. echalo
DateTime dt = (DateTime) datetime;
Tienes 3 opciones:
1) Obtener valor por defecto
dt = datetime??DateTime.Now;
asignará DateTime.Now
(o cualquier otro valor que desee) si datetime
es nulo
2) Compruebe si datetime contiene valor y si no devuelve una cadena vacía
if(!datetime.HasValue) return "";
dt = datetime.Value;
3) Cambiar la firma del método para
public string ConvertToPersianToShow(DateTime datetime)
Es todo porque DateTime?
significa que es nullable DateTime
así que antes de asignarlo a DateTime
, debe verificar si contiene valor y solo asignar.
dt
es nullable
necesita acceder a su Value
if (datetime.HasValue)
dt = datetime.Value;
Es importante recordar que puede ser NULL
. Es por eso que la estructura nullable
tiene la propiedad HasValue
que le dice si es NULL
o no.
También puede utilizar el null-coalescing operator
??
para asignar un valor predeterminado
dt = datetime ?? DateTime.Now;
Esto asignará el valor a la derecha si el valor a la izquierda es NULL