Saltar al contenido

Cómo verificar todas las propiedades de un objeto si null o vacío?

Siéntete libre de divulgar nuestra página y códigos con tus amigos, ayúdanos a hacer crecer esta comunidad.

Solución:

Puedes hacerlo usando Reflection

bool IsAnyNullOrEmpty(object myObject)

    foreach(PropertyInfo pi in myObject.GetType().GetProperties())
    
        if(pi.PropertyType == typeof(string))
        
            string value = (string)pi.GetValue(myObject);
            if(string.IsNullOrEmpty(value))
            
                return true;
            
        
    
    return false;

Matthew Watson sugirió una alternativa usando LINQ:

return myObject.GetType().GetProperties()
    .Where(pi => pi.PropertyType == typeof(string))
    .Select(pi => (string)pi.GetValue(myObject))
    .Any(value => string.IsNullOrEmpty(value));

Supongo que desea asegurarse de que todas las propiedades estén completas.

Una mejor opción es probablemente poner esta validación en el constructor de su clase y lanzar excepciones si falla la validación. De esa manera, no puede crear una clase que no sea válida; capturar excepciones y manejarlas en consecuencia.

La validación fluida es un buen marco (http://fluentvalidation.codeplex.com) para realizar la validación. Ejemplo:

public class CustomerValidator: AbstractValidator 

    public CustomerValidator()
    
        RuleFor(customer => customer.Property1).NotNull();
        RuleFor(customer => customer.Property2).NotNull();
        RuleFor(customer => customer.Property3).NotNull();
    


public class Customer

    public Customer(string property1, string property2, string property3)
    
         Property1  = property1;
         Property2  = property2;
         Property3  = property3;
         new CustomerValidator().ValidateAndThrow();
    

    public string Property1 get; set;
    public string Property2 get; set;
    public string Property3 get; set;

Uso:

 try
 
     var customer = new Customer("string1", "string", null);
     // logic here
  catch (ValidationException ex)
 
     // A validation error occured
 

PD: el uso de la reflexión para este tipo de cosas solo hace que su código sea más difícil de leer. El uso de la validación como se muestra arriba deja explícitamente claro cuáles son sus reglas; y puede extenderlos fácilmente con otras reglas.

Aquí tienes

var instOfA = new ObjectA();
bool isAnyPropEmpty = instOfA.GetType().GetProperties()
     .Where(p => p.GetValue(instOfA) is string) // selecting only string props
     .Any(p => string.IsNullOrWhiteSpace((p.GetValue(instOfA) as string)));

y aquí está la clase

class ObjectA

    public string A  get; set; 
    public string B  get; set; 

Aquí tienes las reseñas y puntuaciones

Te invitamos a añadir valor a nuestro contenido informacional añadiendo tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *