如何检查类成员是否为空或空

Kri*_*s-I 3 c#

我有一个只有这样的字符串成员的类:

public class MyClass
{
    public string MyProp1 { get; set; }
    public string MyProp2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个实例:

Var myClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)

稍后在代码中,我想知道所有成员(MyProp1和MyProp2)是否为空或空.我知道我可以使用if当然但在我的实际代码中有比2更多的属性.

有没有办法做到这一点 ?

谢谢,

Pon*_*dum 10

为您的属性使用基于字典的存储可能是最简单的方法:

public class MyClass
{
    private IDictionary<String, String> _store;

    public MyClass()
    {
        _store = new Dictionary<String, String>();
    }

    public string MyProp1 { 
        get { return GetOrDefault("MyProp1"); }
        set { _store["MyProp1"] = value; }
    }
    public string MyProp2 { 
        get { return GetOrDefault("MyProp2"); }
        set { _store["MyProp2"] = value; }
    }

    public Boolean HasData()
    {
        return _store.Any(x => !String.IsNullOrWhiteSpace(x.Value));
    }

    public Boolean IsEmpty()
    {
        return _store.All(x => String.IsNullOrWhiteSpace(x.Value));
    }   

    private String GetOrDefault(String propertyName)
    {
        if (_store.ContainsKey(propertyName))
        {
            return _store[propertyName];
        }

        return String.Empty;
    }
}
Run Code Online (Sandbox Code Playgroud)

执行此操作的另一种方法是将其与默认实例进行比较:

public class MyClass
{
    public string MyProp1 { get; set; }
    public string MyProp2 { get; set; }

    public static readonly MyClass Empty = new MyClass();

    public Boolean HasData()
    {
        return !Empty.Equals(this);
    }

    public Boolean IsEmpty()
    {
        return Empty.Equals(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 与默认实例相比:精湛的想法. (2认同)

小智 5

您可以尝试使用反射来检查属性。您应该确认所有属性都是公共的,类型是字符串。这是代码。

    public static bool IsNullOrEmpty(MyClass prop)
    {
        bool result = true;

        PropertyInfo[] ps = prop.GetType().GetProperties();

        foreach (PropertyInfo pi in ps)
        {
            string value = pi.GetValue(prop, null).ToString();

            if (string.IsNullOrEmpty(value))
            {
                result = false;
                break;
            }
        }

        return result;
    }
Run Code Online (Sandbox Code Playgroud)