2013-02-13 68 views
1

我想用反射来更好地编写此代码。我现在有IsSearchableIsEditable函数,但是我可以重构此代码以获取c.Searchable和c.Editable部分吗?LINQ中的反射布尔属性

我有10个这样的功能,只需要一个。唯一不同的部分是要检查的布尔属性,c.Searchablec.Editable

bool searchable = conditions 
       .Select(c => c.Searchable) 
       .SingleOrDefault(); 

    bool editable = conditions 
        .Select(c => c.Editable) 
        .SingleOrDefault(); 

回答

3

使用反射是矫枉过正。假设你正在检查,看看是否有匹配EditableSearchable,你也许应该只使用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); 
+0

由于这是完美的。 – user1199595 2013-02-13 07:04:34