質問は少し不明確ですが、あなたが達成したいのは、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
}
}