2014-12-09 7 views
4

У меня есть список предикатовСравнить предикаты

public List<Func<Album, bool>> Predicates { get; set; } 

я хотел бы проверить, если список содержит конкретный предикат.

Что я делаю это:

bool check = Predicates.Contains(x=>x.AlbumName == "Winter"); 

Но это всегда возвращает ложь, даже если есть такой предикат в списке. Я предполагаю, что это потому, что предикаты являются анонимными методами, и каждый из них уникален, но все же можно каким-то образом их сравнить?

+2

@leppie: Я не понимаю, как это происходит, чтобы помочь. –

+0

Predicates.Any() «может» помочь, если он предназначен для тестирования :-) – Sruti

+0

@Sruti Разверните на этом «возможно». Как «Predicates.Any» собирается здесь помочь? –

ответ

5

Я боюсь, что ответ в основном «нет». Если у вас были деревья выражений вместо делегатов, вы могли бы , вероятно, сравнить их с усилиями, но в основном у вас есть ссылки на отдельные методы. Вам нужно будет проверить IL внутри методов, чтобы сравнить, одинаковы ли они.

Конечно, если у вас есть набор объектов, на которых работают предикаты, вы можете узнать, есть ли у вас какие-либо предикаты, которые соответствуют одному и тому же подмножеству, как ваш «целевой» предикат, но это не то же самое, что проверить, является ли предикат на самом деле то же самое.

0

Переключить на Выражение < список Func < Альбом, BOOL >> и создать собственный компаратор

Смежные вопросы