如果我有一个(引用-有关系吗?)类型MyType,它没有覆盖Equals方法,那么在确定ICollection 是否包含该类型的给定实例时将使用什么启发式方法?
使用我自己的启发式方法的最佳方法是什么(例如,检查Id属性值的相等性)?
最佳答案
由于您的类型不会覆盖Equals,因此将使用Equals的默认实现,即引用相等。因此,如果集合包含该实例,则Contains将为true。
要使用自己的比较,请实现IEqualityComparer<T>
(例如,比较ID),然后将比较器的实例传递到Contains方法。 (这假定您能够使用LINQ扩展,因为“ native ” ICollection<T>.Contains
方法没有IEqualityComparer重载。)
关于c# - ICollection <T>。包含自定义类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2143815/