我可以一次查询C#对象的所有布尔属性,寻找单个匹配吗?

时间:2017-03-22 11:33:04

标签: c# linq

虚构物体:

public class ImaginaryObject
{
    int objectId { get; set; }
    string name { get; set; }
    bool b1 { get; set; }
    bool b2 { get; set; }
    bool b3 { get; set; }
}

有没有办法可以编写单个查询,没有命名对象上的任何字段,返回一个布尔值,如果任何,则为真对象的布尔值为true,否则为false?

(用Linq标记,因为我怀疑如果可能的话,它将成为答案的一部分)

1 个答案:

答案 0 :(得分:5)

您可以使用GetType()命名空间中的GetProperties()System.Reflection方法动态获取类型对象所属的详细信息。

var booleanProperties = imaginaryObject.GetType()
     .GetProperties()
     .Where(prop => prop.PropertyType == typeof(Boolean));

foreach(var prop in booleanProperties) 
{
    if((bool)prop.GetValue(imaginaryObject, null) == true)
        return true;
}

或简单地使用LINQ:

 var isAnyTrue= imaginaryObject.GetType()
       .GetProperties()
       .Where(prop => prop.PropertyType == typeof(Boolean))
       .Any(prop => (bool)prop.GetValue(imaginaryObject, null));