Pregunta

Estoy leyendo un libro .Net y en uno de los ejemplos de código hay una definición de clase con este campo:

private DateTime? startdate

Que hace DateTime? ¿significar?

¿Fue útil?

Solución

Desde DateTime es un struct, No un class, obtienes un DateTime objeto, No un referencia, cuando declaras un campo o variable de ese tipo.

Y, de la misma manera que un int no puede ser null, así que esto DateTime El objeto nunca puede ser null, porque no es una referencia.

Agregar el signo de interrogación lo convierte en un tipo anulable, Lo que significa que cualquiera es un DateTime objeto, o es null.

DateTime? es azúcar sintáctico para Nullable<DateTime>, dónde Nullable es en si mismo un struct.

Otros consejos

Es un DateTime que acepta valores NULL. ? después de un tipo/estructura primitivo indica que es la versión que acepta valores NULL.

DateTime es una estructura que nunca puede ser nula.De MSDN:

El tipo de valor DateTime representa fechas y horas con valores que van desde las 12:00:00 de la medianoche, el 1 de enero de 0001 Anno Domini o A.D.(también conocida como Era Común o E.C.) hasta las 11:59:59 p.m. del 31 de diciembre de 9999 d.C.(CE)

DateTime? puede ser nulo sin embargo.

A ? como sufijo para un tipo de valor permite asignaciones nulas que de otro modo serían imposibles.

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

Representa un objeto cuyo tipo subyacente es un tipo de valor que también se le puede asignar una referencia nula.

Esto significa que puedes escribir algo como esto:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

¿Fecha y hora? es sintácticamente equivalente a Anulable<FechaHora>.

Es equivalente a Nullable <DateTime>.Puedes agregar "?" a cualquier tipo o estructura primitiva.

Básicamente te da un estado extra para las primitivas.Puede ser un valor o puede ser nulo.Puede resultar útil en situaciones en las que no es necesario asignar un valor.Entonces, en lugar de usar, por ejemplo, datetime.min o max, puede asignarle null para que no represente ningún valor.

Como sabemos, DateTime es una estructura, lo que significa que DateTime es un tipo de valor, por lo que obtienes un objeto DateTime, no una referencia porque DateTime no es una clase, cuando declaras un campo o variable de ese tipo no puedes inicializar con nulo porque los tipos de valor No acepte nulo.De la misma manera que un int no puede ser nulo.por lo que el objeto DateTime nunca será nulo, porque no es una referencia.

Pero a veces necesitamos variables que aceptan valores NULL o campos de tipos de valor, en ese momento usamos un signo de interrogación para convertirlos en tipos que aceptan valores NULL para que permitan NULL.

Por ejemplo:-

¿Fecha y hora?fecha = nulo;

¿En t?valorint = nulo;

En el código anterior, variable fecha es un objeto de DateTime o es nulo.Lo mismo para valor int.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top