我想使用反射来更好地编写这段代码。我现在有了IsSearchable
和IsEditable
函数,但我可以重构这段代码来获得部分c.可搜索和c.可编辑吗?
我有10个这样的功能,只需要一个。唯一不同的部分是要检查的布尔属性c.Searchable
或c.Editable
。
bool searchable = conditions
.Select(c => c.Searchable)
.SingleOrDefault();
bool editable = conditions
.Select(c => c.Editable)
.SingleOrDefault();
使用反射是过分的。假设您正在检查列表中是否有与Editable
或Searchable
匹配的ANY条件,那么您可能只应该使用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);