C# 比较谓词

C# 比较谓词,c#,predicate,C#,Predicate,我有一个谓词列表 public List<Func<Album, bool>> Predicates { get; set; } 但是,即使列表中有这样一个谓词,它也总是返回false。我假设这是因为谓词是匿名方法,并且每种方法都是唯一的,但是仍然可以以某种方式比较它们吗?我恐怕答案基本上是“不”。如果您使用表达式树而不是委托,那么您可能会将它们与努力进行比较,但基本上您有对不同方法的引用。您需要检查方法中的IL,以比较它们是否相同 当然,如果您有一组谓词操作的对象,您

我有一个谓词列表

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

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

我恐怕答案基本上是“不”。如果您使用表达式树而不是委托,那么您可能会将它们与努力进行比较,但基本上您有对不同方法的引用。您需要检查方法中的IL,以比较它们是否相同

当然,如果您有一组谓词操作的对象,您可以找出是否有任何谓词与“目标”谓词的子集匹配,但这与测试谓词实际上是否相同并不相同。

切换到 Expression>列表
创建自定义比较器

谓词比较是完全可能的。错误的是使用lambda表达式,基本上是为每个谓词声明新方法(以及它们的比较)!:)

使用普通函数代替lambdas

例如,声明:
boolAlbumNameFilter(AlbumAlbum){returnalbum.Name==“Winter”}

您可以将
AlbumNameFilter
添加到
谓词列表中,然后
查找它:

Predicates.Contains(AlbumnameFilter);

@leppie:我看不出这会有什么帮助。谓词.Any()“may”可能会有帮助,如果是为了测试的目的:-)@Sruti在“may”上展开。如何使用
谓词。任何
都会有帮助吗?@JonSkeet:oooooops,我的坏/o\
Predicates.Contains(AlbumnameFilter);