C# - 传递函数以将对象属性派生为参数

时间:2013-01-21 12:37:35

标签: c# linq generics

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

1 个答案:

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