C# 如何检查对象的多个属性是否有值

C# 如何检查对象的多个属性是否有值,c#,design-patterns,C#,Design Patterns,我有一个具有n个属性的类,我需要知道如果超过1个属性有值,那么它将为false,我编写了一个类似于CheckValue的方法 有没有更好的方法来编写CheckValue方法?您可以执行以下操作。举个例子,我假设您所关注的属性是以模式值命名的。您可以根据需要更改搜索筛选器 public bool CheckValue() { return this.GetType().GetProperties() .Where(property=> proper

我有一个具有n个属性的类,我需要知道如果超过1个属性有值,那么它将为false,我编写了一个类似于CheckValue的方法


有没有更好的方法来编写CheckValue方法?

您可以执行以下操作。举个例子,我假设您所关注的属性是以模式值命名的。您可以根据需要更改搜索筛选器

public bool CheckValue()
{
       return this.GetType().GetProperties()
               .Where(property=> property.Name.StartsWith("Value"))
               .Count(property=>property.GetValue(this,null)!=null)>=1;

}
如果不想筛选属性,可以执行以下操作

 return `this.GetType().GetProperties().Count(property=>property.GetValue(this,null)!=null)>=1;
您可能还必须标识值类型的预期/默认值,并添加相同值的检查,因为上面的查询只检查空值。
但是请注意使用反射`.

的性能含义,假设所有属性都是相同的类型,或者所有属性都可以为空。您可以使用参数:


您可能会从CodeReview获得更好的反馈,这将检查所有属性。您可以使用if Value1!=空| |值2!=空| | Vaule3!=无效的如果你想微观优化,你可以把最常见的赋值属性放在第一位…另一种方法是使用我只是想找到最简单的方法。并防止在添加1个属性时更改代码。实际上,我将在构造函数中删除此方法并移除集合。查看我的更新问题检查propertychanged事件,这样您就不必记住向CheckValue方法添加代码。您可以,您可能不应该。是的,我同意。只是添加了这个选项,因为OP提到了n个属性,如果有很多属性,那么非反射方法可能会变得难看。也许我会在回答时加上一句,我的财产名称是随机的,不是value@GreyWolf您想检查类中的所有属性还是某些属性?添加了一个没有反映的答案,但有一些有趣的替代方案,例如,如果属性具有公共setter,那么属性更改事件将非常有效。
 return `this.GetType().GetProperties().Count(property=>property.GetValue(this,null)!=null)>=1;
 public class ClassExample
    {
        public ClassExample(params string[] values)
        {
            if (values == null || values.Count(p => p != null) != 1) throw new ArgumentException("Just 1 value please");
            if (values.Length > 0) Value1 = values[0];
            if (values.Length > 1) Value2 = values[1];
            // rest of property assignments;
        }
        public string Value1 { get; private set; }
        public string Value2 { get; private set; }
        public string Value3 { get; private set; }

    }
}