Делегаты могут быть объединены, поэтому:
MethodInvoker del = delegate { Console.WriteLine("Delegate 1"); };
del += delegate { Console.WriteLine("Delegate 2"); };
del.Invoke();
Выходы:
Delegate 1
Delegate 2
Поскольку он вызывает оба метода, я попробовал это, чтобы увидеть, будет ли это работать:
Func<Person, bool> filters = person => person.Name.Contains("John");
filters += person => person.Age >= 18;
List<Person> persons = getPersons();
persons.Where(filters);
Но это не так, применяется только последний (в данном случае person => person.Age >= 18
).
Мой вопрос: почему бы и нет?Возможно ли это реализовать?(не то чтобы я переписывал методы расширения Linq просто для реализации этого, но было бы круто, если это возможно)
Примечание: Я знаю, что в LINQ to Objects выполнение этого было бы аналогичным, так какисполнение отложено:
persons.Where( x => x.Name.Contains( nameFilter )).Where( x => x.Age >= 18 );
Но это не то, что меня интересует.