传递函数以派生对象属性作为参数

本文关键字:参数 属性 对象 派生 传递函数 | 更新日期: 2023-09-27 17:54:44

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

传递函数以派生对象属性作为参数

您可以轻松添加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

顺便说一句:请注意我命名参数的方式。. net命名约定不使用下划线作为参数。