虚构物体:
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标记,因为我怀疑如果可能的话,它将成为答案的一部分)
答案 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));