tipo puede objeto implícitamente convertir c# linq

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