比较谓词

jek*_*com 4 c# predicate

我有一个谓词列表

public List<Func<Album, bool>> Predicates { get; set; }
Run Code Online (Sandbox Code Playgroud)

我想检查列表是否包含特定谓词.

我这样做是:

bool check = Predicates.Contains(x=>x.AlbumName == "Winter");
Run Code Online (Sandbox Code Playgroud)

但即使列表中有这样的谓词,这也总是返回false.我认为这是因为谓词是匿名方法,并且每种方法都是独一无二的,但仍然可以以某种方式比较它们吗?

Jon*_*eet 5

我担心答案基本上是"不".如果你有表达式树,而不是代表,那么你可以大概比较那些有精力,但基本上你得单独的方法引用.您需要检查方法中的IL,以比较它们是否相同.

当然,如果你有一组谓词运行的对象,你可以找出你是否有任何谓词与你的"目标"谓词匹配相同的子集,但这与测试谓词是否实际上是相同的不同.