我想通过在函数参数中指定我搜索的Foo的属性来使这个函数更通用。目前,我必须为Foo的每个属性提供一个函数,而不仅仅是一个泛型函数。
private Func<Foo, bool> ByName(bool _exclude, string[] _searchTerms)
{
if (_exclude)
{
return x => !_searchTerms.Contains( x.Name.Replace(" ", "").ToLower() );
}
return x => _searchTerms.Contains( x.Name.Replace(" ", "").ToLower() );
}
是否可以使此函数更通用,以便能够传递Foo的搜索属性?
答案 0 :(得分:6)
您可以轻松添加Func<Foo, string>
:
private Func<Foo, bool> By(Func<Foo, string> property,
bool exclude, string[] searchTerms)
{
if (exclude)
{
return x => !searchTerms.Contains( property(x).Replace(" ", "").ToLower() );
}
return x => searchTerms.Contains( property(x).Replace(" ", "").ToLower() );
}
你会这样称呼它:
By(x => x.Name, ...);
请注意,此方法不是通用的。它仅支持string
类型的属性,因为您的搜索方法在属性上使用Replace
,而searchTerms
也是strings
。
BTW:请注意我命名参数的方式。 .NET命名约定不对参数使用下划线。