Tengo el siguiente objeto y necesito verificar vacío / nulabilidad antes de hacer algo.

Objeto:

ObjectA = new ObjectA
{
    ObjectB = new ObjectB
    {
        attribute1 = "64072292046",
        attribute2 = "",
        attribute3 = null
    }
} 

Código para comprobar la nulabilidad y vacío

Método I:

private bool checkDataExist(ObjectA myObject)
{
    return !myObject.ObjectB.attribute1.IsNullOrWhiteSpace() 
    || !myObject.ObjectB.attribute2.IsNullOrWhiteSpace() 
    || !myObject.ObjectB.attribute3.IsNullOrWhiteSpace();
}

Método II

private bool checkDataExist(ObjectA myObject)
{
    return (myObject.ObjectB.attribute1?? myObject.ObjectB.attribute2 ?? myObject.ObjectB.attribute3) != null;
}

Desde el punto de vista de la legibilidad del código, esto no es genial. ¿Solo se pregunta alguna otra forma de representar esto como más legible para los humanos?

-2
SMPH 5 oct. 2019 a las 04:37

1 respuesta

La mejor respuesta

Puede encapsular esa lógica en las clases y dejar que decida cuándo es válida.

public class ObjectA
{
    public ObjectB ObjectB { get; set; }

    public bool IsValid()
    {
        if (ObjectB == null) return false;
        return ObjectB.IsValid();
    }
}

public class ObjectB
{
    public string Attribute1 { get; set; }
    public string Attribute2 { get; set; }
    public string Attribute3 { get; set; }

    public bool IsValid()
    {
        return !string.IsNullOrWhiteSpace(Attribute1) 
        || !string.IsNullOrWhiteSpace(Attribute2)
        || !string.IsNullOrWhiteSpace(Attribute3);
    }
}

Entonces puedes usarlo así

var objA = new ObjectA
{
    ObjectB = new ObjectB
    {
         //init
    }
};

if(objA.IsValid())
    // do whatever
3
JohanP 5 oct. 2019 a las 02:19