1

我想使用反射来更好地编写这段代码。我现在有了IsSearchableandIsEditable函数,但是我可以重构这段代码来得到 c.Searchable 和 c.Editable 部分吗?

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

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

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

1 回答 1

3

使用反射是多余的。假设您正在检查列表中是否有任何条件匹配Editableor 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);
于 2013-02-13T06:43:59.750 回答