vb.net - 自定义 Generic.IEqualityComparer(Of T) - 编译器错误

标签 vb.net linq compiler-warnings iequalitycomparer

我正在尝试实现一个简单的 IEquilityComparer 以与 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

我遇到的问题是这两个函数都抛出编译器警告“函数‘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

关于vb.net - 自定义 Generic.IEqualityComparer(Of T) - 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1006417/

相关文章:

c# - 将整数列表移动到列表的前面

c# - 获取唯一元素

android - 如何在不得到警告的情况下获得释放?

c++ - 为什么 LLVM 提示缺少函数原型(prototype)?

c# - 如何反序列化包含 JSON.NET 中的字符串和对象的数组

mysql - 如果选择 Combobox vb.net mysql,文本框中的数据库值

c# - 使用linq在查找表中查找记录

vb.net - 在 vb.net 中测试 zip 密码的正确性

c# - 如何在 C# 或 VB.Net 中获取没有 WWW 的域名

c++ - 是否存在 static_warning?