with what property español done create c# generics reflection nullable

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> .