Fou*_*aks 5 linq vb.net compiler-warnings iequalitycomparer
我正在尝试实现一个简单的IEqulityComparer以与LINQ集合一起使用。我编写了以下代码,出于讨论目的,这些代码简化为最简单的形式...
Public Structure bob
Dim SiteID As Integer
Dim fred As String
End Structure
Public Class insCompare
Implements System.Collections.Generic.IEqualityComparer(Of bob)
Public Function Equals(ByVal x As bob, ByVal y As bob) As Boolean
Return IIf(x.SiteID = y.SiteID, True, False)
End Function
Public Function GetHashCode(ByVal x As bob) As Integer
Return x.SiteID.GetHashCode()
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
我的问题是两个函数都抛出编译器警告“函数'getHashCode'(或'Equals')在基类'Object'中遮盖了可覆盖的方法。要覆盖基类方法,必须将该方法声明为'Overrides '。”
但是,如果我将它们声明为Overrides,则会出现错误“函数'GetHashCode'无法声明为Overrides,因为它没有覆盖基类中的函数。”!
我还在“ Implements”行上收到编译器错误,以至于我必须实现“ getHashCode”,但我认为这是第一个问题的结果。
我所有的研究都表明我应该没事-有人知道了吗?
这是对该问题的较晚答案,但根据文档,您可以使用以下内容。请注意包含了 Overloads 关键字。
Public Class MyModelComparer
Implements Generic.IEqualityComparer(Of MyModel)
Public Overloads Function Equals(x As MyModel, y As MyModel) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of MyModel).Equals
' do compare
End Function
Public Overloads Function GetHashCode(obj As MyModel) As Integer Implements System.Collections.Generic.IEqualityComparer(Of MyModel).GetHashCode
' do hashcode
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
好吧,似乎可以通过重命名函数并将它们声明为“实现”来进行排序,尽管我在网上看到了数十个示例,但情况并非如此。不过,我现在收到一个运行时异常,我将单独发布该异常。
Public Class insCompare
Implements System.Collections.Generic.IEqualityComparer(Of Object)
Public Function Equals1(ByVal x As Object, ByVal y As Object) As Boolean Implements System.Collections.Generic.IEqualityComparer(Of Object).Equals
Return IIf(x.SiteID = y.SiteID, True, False)
End Function
Public Function GetHashCode1(ByVal x As Object) As Integer Implements System.Collections.Generic.IEqualityComparer(Of Object).GetHashCode
Return x.SiteID.ToString.ToLower.GetHashCode()
End Function
End Class
Run Code Online (Sandbox Code Playgroud)