-1

コンストラクターがあります

class MyClass
{
    public MyClass(IReportGroup reportGroup, Func<..., bool> filter)
    {
         reportGroup.Reports.Where(filter).ToList().ForEach(r => ... )
    }
}

呼び出す:new MyClass(reportGroup, () => reports.Where(r=>r.ID != 0))

4

3 に答える 3

1

質問は少し不明確ですが、あなたが達成したいのは、Where メソッド内で使用されるフィルター式を渡すことだと思いますか? リストで見つかったオブジェクトのタイプであるFunc<T, bool>whereを渡すことで、これを行うことができます。Tこれを示す小さなサンプル プログラムをまとめました。

public class Person
{
    public string Name { get; set; }
}

public class Program
{
    private static void Main(string[] args)
    {
        IEnumerable<Person> persons = GetPersons();

        // invoke the method, passing a filter expression to be used
        PrintFiltered(persons, p => p.Name.StartsWith("F"));
    }

    private static void PrintFiltered(IEnumerable<Person> persons, Func<Person, bool> filter)
    {
        // use the expression to filter the sequence
        foreach (Person person in persons.Where(filter))
        {
            Console.WriteLine(person.Name);
        }
    }

    private static IEnumerable<Person> GetPersons()
    {
        return new[]
            {
                new Person { Name = "Fredrik" },
                new Person { Name = "John" },
                new Person { Name = "Steven" },
            };
    }
}

コンストラクターでフィルターを受け入れ、デフォルトのフィルター (完全なシーケンスを返す) も持つには、次のようにします。

class MyClass
{
    public MyClass() : this(p => true) { }

    public MyClass(Func<Person, bool> filter)
    {
        // do work
    }
}        
于 2012-11-13T11:56:26.557 に答える
0

フィルター式をパラメーターとしてコンストラクターに渡したいと思います。関数内に記述したラムダのみを渡しwhere、パラメーターの型定義でレポート コレクション要素の型を指定する必要があります。

public MyClass(IReportGroup reportGroup, Expression<Func<Report, bool>> filter)

そして、次のように呼び出します。

new MyClass(reportGroup, r => r.ID != 0)
于 2012-11-13T11:50:38.743 に答える
0

これはあなたが望むものです -

  new MyClass(reportGroup, r => r.ID != 0)
于 2012-11-13T11:56:01.477 に答える