2013-02-13 107 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