Vb.net 在VB中检查通用对象是否相等

Vb.net 在VB中检查通用对象是否相等,vb.net,generics,equality,Vb.net,Generics,Equality,这件事看起来很琐碎,但我没能让它发挥作用。我需要比较相同类型T的两个泛型是否相等: Sub SomeMethod(Of T)(x As T, y As T) If x Is y ' do stuff End If End Sub Compiler说不: “T”类型的“Is”操作数只能与“Nothing”进行比较,因为“T”是没有类约束的类型参数 给它一个类约束,如下所示: Sub SomeMethod(Of T As Class)(x As T, y As T

这件事看起来很琐碎,但我没能让它发挥作用。我需要比较相同类型T的两个泛型是否相等:

Sub SomeMethod(Of T)(x As T, y As T) 
    If x Is y
        ' do stuff
    End If
End Sub
Compiler说不:

“T”类型的“Is”操作数只能与“Nothing”进行比较,因为“T”是没有类约束的类型参数


给它一个类约束,如下所示:

Sub SomeMethod(Of T As Class)(x As T, y As T)
    If x Is y Then
        ' do stuff
    End If
End Sub
对于记录:Is比较引用,因此您的代码尝试检查x是否与y是完全相同的对象/实例。如果您只是想比较这两种类型,那么您应该看到:-如果设置为T的类型是自定义类型,那么您必须确保它覆盖Object.Equals,否则这几乎不起作用。所有内置的.NET类型都会这样做,因此您不必担心它们。