1

関数の引数で検索する Foo のプロパティを指定することで、この関数をより汎用的にしたいと考えています。現時点では、1 つの汎用関数ではなく、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

ところで:私がパラメータに名前を付けた方法に注意してください。.NET 命名規則では、パラメーターにアンダースコアを使用しません。

于 2013-01-21T12:41:57.980 に答える