LINQ中的反射布尔属性
问题描述:
我想用反射来更好地编写此代码。我现在有IsSearchable
和IsEditable
函数,但是我可以重构此代码以获取c.Searchable和c.Editable部分吗?LINQ中的反射布尔属性
我有10个这样的功能,只需要一个。唯一不同的部分是要检查的布尔属性,c.Searchable
或c.Editable
。
bool searchable = conditions
.Select(c => c.Searchable)
.SingleOrDefault();
bool editable = conditions
.Select(c => c.Editable)
.SingleOrDefault();
答
使用反射是矫枉过正。假设你正在检查,看看是否有匹配Editable
或Searchable
,你也许应该只使用Any()
语法列表中的任何条件...
你可以使用一个方法,如
public bool CheckCondition(IEnumerable<Condition> conditions, Func<Condition, bool> predicate)
{
return conditions.Any(predicate);
}
和像这样使用它:
var isSet = CheckCondition(conditions, c => c.Editable);
但是你并没有节省你自己。你可能每次只写Any()
。例如,
var isEditable = conditions.Any(c => c.Editable);
由于这是完美的。 – user1199595 2013-02-13 07:04:34