Pregunta Verificar que un valor entero sea nulo en c #


Tengo un valor entero y necesito verificar si es NULO o no. Lo obtuve usando un operador nulo-coalescente

DO#:

public int? Age;

if ((Age ?? 0)==0)
{
   // do somethig
}

Ahora tengo que verificar en una aplicación anterior donde la parte de declaración no está en ternario. Entonces, cómo lograr esto sin el operador de fusión nula.


35
2017-09-21 09:45


origen


Respuestas:


Nullable<T> (o ?) expone una HasValue indicador para indicar si se establece un valor o si el elemento es nulo.

Además, admite tipos anulables ==:

if (Age == null)

los ?? es el operador coalescente nulo y no da como resultado una expresión booleana, sino un valor devuelto:

int i = Age ?? 0;

Entonces para tu ejemplo:

if (age == null || age == 0)

O:

if (age.GetValueOrDefault(0) == 0)

O:

if ((age ?? 0) == 0)

O ternario:

int i = age.HasValue ? age.Value : 0;

85
2017-09-21 09:47



Varias cosas:

Age no es un número entero, es un nullable tipo entero Ellos no son los mismos. Ver la documentación para Nullable<T> en MSDN para más detalles.

?? es el nulo coalesce operador, no el operador ternario (realmente llamado el operador condicional)

Para verificar si un tipo que admite nulos tiene un valor de uso HasValue, o verifica directamente contra null:

if(Age.HasValue)
{
   // Yay, it does!
}

if(Age == null)
{
   // It is null :(
}

12
2017-09-21 09:48



Ya hay una respuesta correcta de Adam, pero tiene otra opción para refactorizar su código:

if (Age.GetValueOrDefault() == 0)
{
    // it's null or 0
}

1
2017-09-21 09:50



Simplemente puedes hacer esto:

    public void CheckNull(int? item)
    {
        if (item != null)
        {
            //Do Something
        }

    }

1
2017-10-10 19:43



Como se indicó anteriormente, ?? es el operador nulo coalescente. Entonces el equivalente a

(Age ?? 0) == 0

sin usar el ?? operador es

(!Age.HasValue) || Age == 0

Sin embargo, no hay una versión de .Net que tenga Nullable <T> pero no ??, entonces tu declaración,

Ahora tengo que verificar en una aplicación anterior donde la parte de declaración no está en ternario.

es doblemente inválido


0
2017-09-21 09:56