如何按值

时间:2016-05-15 15:47:59

标签: wpf vb.net

我需要比较同一类按值的两个对象,看看它们的所有值是否匹配。

对于背景,我可以比较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)你知道我不是更好的方式!

如果可能,我会感谢基于此场景的示例。

非常感谢

1 个答案:

答案 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时会抛出一些异常......