1

我想通过指定我在函数参数中搜索的 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 的搜索属性?

4

1 回答 1

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 命名约定不使用下划线作为参数。

于 2013-01-21T12:41:57.980 回答