Steps to reproduce:
- Naming convention for parameters is _PascalCase
- Start with the code:
Visual BasicImports System.ComponentModel
Public Class Class3
Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(_PropertyName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(_PropertyName))
End Sub
Private m_Prop1 As String
Private m_Prop2 As GenericEventArgs(Of GenericResultFlags)
Public Property Prop1 As String
Get
Return m_Prop1
End Get
Set(_Value As String)
If m_Prop1 Is _Value Then
Return
End If
m_Prop1 = _Value
NotifyPropertyChanged(NameOf(Prop1))
End Set
End Property
Public Property Prop2 As GenericEventArgs
Get
Return m_Prop2
End Get
Set(_Value As GenericEventArgs)
If m_Prop2 = _Value Then
Return
End If
m_Prop2 = _Value
NotifyPropertyChanged(NameOf(Prop2))
End Set
End Property
Public Sub New(ByVal _Prop1 As String, ByVal _Prop2 As GenericEventArgs)
m_Prop1 = _Prop1
m_Prop2 = _Prop2
End Sub
End Class
- Execute the Implement IEquatable code provider
Expected results:
Visual BasicPublic Overrides Function Equals(_Obj As Object) As Boolean
If TypeOf _Obj Is Class3 Then
Return Equals(CType(_Obj, Class3))
End If
Return MyBase.Equals(_Obj)
End Function
Public Shared Operator =(_First As Class3, _Second As Class3) As Boolean
If CType(_First, Object) Is Nothing Then
Return CType(_Second, Object) Is Nothing
End If
Return _First.Equals(_Second)
End Operator
Public Shared Operator <>(_First As Class3, _Second As Class3) As Boolean
Return Not (_First = _Second)
End Operator
Public Overloads Function Equals(_Other As Class3) As Boolean Implements IEquatable(Of Class3).Equals
If ReferenceEquals(Nothing, _Other) Then
Return False
End If
If ReferenceEquals(Me, _Other) Then
Return True
End If
Return Equals(m_Prop1, _Other.m_Prop1) AndAlso Equals(m_Prop2, _Other.m_Prop2)
End Function
Public Overrides Function GetHashCode() As Integer
Dim hashCode As Long = 47
If m_Prop1 IsNot Nothing Then
hashCode = CInt(((hashCode * 53) + EqualityComparer(Of String).Default.GetHashCode(m_Prop1)) And &H7FFFFFFFL)
End If
If m_Prop2 IsNot Nothing Then
hashCode = CInt(((hashCode * 53) + EqualityComparer(Of GenericEventArgs).Default.GetHashCode(m_Prop2)) And &H7FFFFFFFL)
End If
Return CInt(hashCode)
End Function
Current results:
Visual BasicPublic Overrides Function Equals(obj As Object) As Boolean
If TypeOf obj Is Class3 Then
Return Equals(CType(obj, Class3))
End If
Return MyBase.Equals(obj)
End Function
Public Shared Operator =(first As Class3, second As Class3) As Boolean
If CType(first, Object) Is Nothing Then
Return CType(second, Object) Is Nothing
End If
Return first.Equals(second)
End Operator
Public Shared Operator <>(first As Class3, second As Class3) As Boolean
Return Not (first = second)
End Operator
Public Overloads Function Equals(other As Class3) As Boolean Implements IEquatable(Of Class3).Equals
If ReferenceEquals(Nothing, other) Then
Return False
End If
If ReferenceEquals(Me, other) Then
Return True
End If
Return Equals(m_Prop1, other.m_Prop1) AndAlso Equals(m_Prop2, other.m_Prop2)
End Function
Public Overrides Function GetHashCode() As Integer
Dim hashCode As Long = 47
If m_Prop1 IsNot Nothing Then
hashCode = CInt(((hashCode * 53) + EqualityComparer(Of String).Default.GetHashCode(m_Prop1)) And &H7FFFFFFFL)
End If
If m_Prop2 IsNot Nothing Then
hashCode = CInt(((hashCode * 53) + EqualityComparer(Of GenericEventArgs).Default.GetHashCode(m_Prop2)) And &H7FFFFFFFL)
End If
Return CInt(hashCode)
End Function