c# - parameter - Forma correcta de verificar si un tipo es Nullable
generics c# where constraint (2)
Absolutamente, usa Nullable.GetUnderlyingType
:
if (Nullable.GetUnderlyingType(propertyType) != null)
{
// It''s nullable
}
Tenga en cuenta que esto utiliza la clase estática no genérica System.Nullable
lugar de la estructura genérica Nullable<T>
.
También tenga en cuenta que eso verificará si representa un tipo de valor anulable específico (cerrado) ... no funcionará si lo usa en un tipo genérico , por ejemplo
public class Foo<T> where T : struct
{
public Nullable<T> Bar { get; set; }
}
Type propertyType = typeof(Foo<>).GetProperty("Bar").PropertyType;
// propertyType is an *open* type...
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo verificar si un objeto es anulable? 13 respuestas
Para verificar si un Type
( propertyType
) es anulable, estoy usando:
bool isNullable = "Nullable`1".Equals(propertyType.Name)
¿Hay alguna forma de evitar usar cadenas mágicas?
Use el siguiente código para determinar si un objeto Type representa un tipo Nullable. Recuerde que este código siempre devuelve falso si el objeto Type fue devuelto por una llamada a GetType.
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…}
explicado en el siguiente enlace de MSDN:
http://msdn.microsoft.com/en-us/library/ms366789.aspx
Además, hay una discusión similar en este SO QA: