我需要比较同一类按值的两个对象,看看它们的所有值是否匹配。
对于背景,我可以比较wpf数据网格行的值之前和之后
假设这些对象都是House类,其属性为name,street,town(所有字符串)。
所以课程将是
public class House
public property name as string
public property street as string
public property town as string
end class
我应该
1)在House类中重写equals并在其中检查name = name,street = street,town = town
2)使House类实现IComparable并创建一个实现它的compare函数,将每个属性检查为1
3)你知道我不是更好的方式!
如果可能,我会感谢基于此场景的示例。
非常感谢
答案 0 :(得分:1)
您应该使用选项1:覆盖Equals方法。
为什么?
因为当你想要比较两个对象是否相同时,应该使用Equals()方法。
那么IComparabe的用途是什么?
IComparable接口有不同的用途。它的目标是检查一个对象是否应该在另一个对象之前或之后。因此,排序方法会使用它。
你可以实现IComparable接口并检查两个对象的CompareTo()方法是否返回0.但是这只意味着它们应该得到相同的排名,而不是它们等于......
还有其他方法吗?
有很多不同的方法可以做你想做的事。但是由于这里有一个简单而优雅的方法,让我们使用那个。编写应用程序的主要困难是找到已经在这里做你想做的工具......
那么如何覆盖Equals()方法?
This link to MSDN解释了如何覆盖Equals方法
简而言之(我只是从MSDN复制/粘贴并删除错误检查以获得清晰度):
Public Class Point
Protected x As Integer
Protected y As Integer
Public Sub New (xValue As Integer, yValue As Integer)
Me.x = xValue
Me.y = yValue
End Sub
Public Overrides Overloads Function Equals(obj As Object) As Boolean
Dim p As Point = CType(obj, Point)
Return Me.x = p.x And Me.y = p.y
End Function
End Class
不要直接使用这个并首先阅读文章,因为你必须在Equals中进行一些错误检查,因为在将Object转换为Point时会抛出一些异常......