c# - what - Reflexión: compruebe que todas las propiedades anulables tienen valores
what can be done with reflection in c# (2)
Dado que ha establecido que la propiedad es de tipo Nullable<something>
, sabe que su valor tiene una propiedad HasValue
, por lo tanto, busque esa propiedad por reflexión y obtenga su valor.
Tengo que recorrer todas las propiedades en unas pocas clases y verificar las propiedades que puedan contener nulos para ver si tienen un valor. ¿Cómo convierto el valor devuelto desde propertyInfo.GetValue () a un tipo anulable genérico para que pueda verificar la propiedad HasValue?
Código cortado por brevedad:
foreach (PropertyInfo propInfo in this.GetType().GetProperties())
{
if (<Snip: Check to see that this is a nullable type>)
{
//How do i cast this properly in here to allow me to do:
if(!((Nullable)propInfo.GetValue(this, null)).HasValue)
//More code here
}
}
tenga en cuenta que supongo que quiere decir Nullable<T>
; Si te refieres a Nullable<T>
o una referencia, entonces ya lo tienes: object
(de GetValue
): simplemente comprueba si hay un null
.
En el caso de Nullable<T>
; no puede convertir a un solo tipo no genérico (que no sea un object
), pero no necesita hacerlo; simplemente verifique que no sea null
, ya que Nullable<T>
vacío Nullable<T>
está encuadrado en null
, y GetValue
devuelve el object
(de ahí encierra el valor).
if(Nullable.GetUnderlyingType(propInfo.PropertyType) != null) {
// it is a Nullable<T> for some T
if(propInfo.GetValue(this, null) != null) {
// it has a value (it isn''t an empty Nullable<T>)
}
}
Para aclarar, Nullable
es una clase de utilidad estática que está completamente separada de la Nullable<T>
; así que no Nullable
a Nullable
en absoluto. A medida que sucede, Nullable
existe para proporcionar cosas como GetUnderlyingType
que le ayuda a trabajar con Nullable<T>
.