- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些带有两个对象列表的代码。第一个列表比第二个列表更具包容性。我希望从第一个列表中排除第二个列表中的项目。经过一番研究,我发现扩展方法 Except
是这样做的方法。我为此实现了 IEquatable(Of T)
和 IEqualityComparer(Of T)
在我的代码中是这样的:
Partial Public Class CustomerData
Implements IEquatable(Of CustomerData)
Implements IEqualityComparer(Of CustomerData)
Public Overloads Function Equals(other As CustomerData) As Boolean Implements IEquatable(Of ToolData.CustomerData).Equals
If other Is Nothing Then
Return False
Else
Return Me.CustomerID = other.CustomerID
End If
End Function
Public Overloads Function Equals(this As CustomerData, that As CustomerData) As Boolean Implements IEqualityComparer(Of ToolData.CustomerData).Equals
If this Is Nothing OrElse that Is Nothing Then
Return False
Else
Return this.CustomerID = that.CustomerID
End If
End Function
Public Overloads Function GetHashCode(other As CustomerData) As Integer Implements IEqualityComparer(Of ToolData.CustomerData).GetHashCode
If other Is Nothing Then
Return CType(0, Integer).GetHashCode
Else
Return other.CustomerID.GetHashCode
End If
End Function
customerCollection = CustomerData.LocalCustomers.Except(CustomerData.RecentCustomers).OrderBy(Function(x) x.FullName).ToList
customerCollection = CustomerData.LocalCustomers.Except(CustomerData.RecentCustomers, EqualityComparer(Of CustomerData).Default).OrderBy(Function(x) x.FullName).ToList
customerCollection = CustomerData.LocalCustomers.Except(CustomerData.RecentCustomers, New CustomerData).OrderBy(Function(x) x.FullName).ToList
RecentCustomers
和
LocalCustomers
都是
List(Of CustomerData)
为什么默认的比较方法不起作用?当我说它不起作用时,我的意思是我可以在
Equals
中放置断点和
GetHashCode
例程,它们永远不会被命中,返回的列表与
LocalCustomers
的列表相同。 .
最佳答案
首先,您不需要实现 IEqualityComparer(Of T)
界面;如果您想为同一个类提供多种类型的相等性,您通常会在另一个类中实现它。
其次,您需要覆盖 GetHashCode
和 Equals(Object)
方法:
Partial Public Class CustomerData
Implements IEquatable(Of CustomerData)
Public Override Function GetHashCode() As Integer
Return CustomerID.GetHashCode()
End Function
Public Override Function Equals(ByVal obj As Object)
Return Equals(TryCast(obj, CustomerData))
End Function
Public Overloads Function Equals(other As CustomerData) As Boolean Implements IEquatable(Of ToolData.CustomerData).Equals
If other Is Nothing Then
Return False
Else
Return Me.CustomerID = other.CustomerID
End If
End Function
...
关于.net - IEquatable(Of T)/IEqualityComparer(Of T)不被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365667/
我有一个树型类 Foo及其界面 IFoo . 我想要 Foo能够实现IEquatable>什么时候T : IEquatable (或者更一般地说,如果 T : I 我可能想要 Foo : I> 除了其
域类 T可以是 ValueObject 类型: public class Coordinate: ValueObject { ... } ValueObject实现 IEquatable界面。我想要
我首先使用带有 EntityFramework 代码的 ASP.NET MVC。 我正在尝试为将保存到我的数据库中的所有对象创建一个基类(这里称为实体类)。 有没有在基类中实现IEquatable的好
我想比较两个相同类型的自定义类对象。被比较的自定义类有一个 List 属性,其中填充了另一种自定义类型的项目。这可以通过继承 IEquatable 实现吗? 我不知道如何通过修改 MSDN's cod
当我使用 IEquatable interface 实现要比较的对象时: 为什么我必须覆盖 Equals(object)方法,如果我已经实现 Equals(T) ? 我可以使用==吗?和 !=运营商一
我想要一个通用类来实现 IEquatable 接口(interface)。该类具有 T 类型的数据项。要使泛型类等同,数据项也必须是 T 类型。 这是我的通用类: public class V : I
我有一个代表外部物理测量设备的类。简化版本如下所示: public class Device { public string Tag { get; set; } public int
我有一个 IEquatable方法如下: public bool Equals(TravelOptions other) { if (other == null) return false;
我有一个来自 SQL Server 数据库的 POCO,它有一个身份 ID 字段。我想实现 IEquatable 这样我就可以检查它们是否是相同的记录,使用 .Contains()在 List等 假设
我尝试使用以下方法来阻止人们更改 querystring为了查看其他人的详细信息: public static bool IsCurrentUserAuthorisedVessel(HttpReque
假设我有以下类(class): public sealed class ScaleValue : IComparable, IComparable, IEquatable { publ
我有一个可以毫无问题地序列化为 XML 的对象。但是,当我实现 IEquatable 并覆盖函数时,我收到有关未正确生成 XML 的错误。以前有人遇到过这个吗? 最佳答案 您可能需要覆盖 Equals
这是一个关于我正在尝试做的事情的例子: public class Foo : IEquatable { public bool Equals(Foo other) {
我经常使用代表工厂生产的实体的类。为了方便地测试我的工厂,我通常实现 IEquatable , 同时也覆盖 GetHashCode和 Equals (如 MSDN 所建议)。 例如;采用以下为示例目的
我有一个包含两个字符串和一个枚举的类。我正在尝试使用此类的实例作为字典中的键。不幸的是,我似乎没有正确实现 IEquatable。这是我的做法: public enum CoinSide {
我想知道 F# 中的相等测试在哪些情况下会导致装箱,以及是否存在覆盖 Equals 的情况。和 GetHashCode并实现IEquatable<>比使用 StructuralEqualityAttr
我刚刚将 Visual Studio 更新到最新的 16.6.0 Preview 1.0 和最新的 .NET Core 3.1.2。我的项目有enable . IEquatable 似乎发生了变化。现
我已经实现了IEquatable比较两个列表中的对象但是我想有条件地这样做: public bool Equals(CustomerType other) { if (this.Zipcode
我正在研究接口(interface)的类型,但我不明白如何使用 IEquatable 接口(interface)。 我认为它比直接使用a.Equals(b)提供了更好的性能,因为我们避免了拳击...我
嗯,我遇到了 IEquatable (C#) 的问题。正如您在下面的代码中看到的,我得到了一个实现了 IEquatable 的类,但是它的“Equals”方法无法实现。我的目标是:我的数据库中有一个日
我是一名优秀的程序员,十分优秀!