次のように定義された Excel Range オブジェクト (いいえ、これは交渉できません) をキーとする Dictionary があります (CellProp 型は、さまざまなセル プロパティを含むオブジェクトです)。
Dim dic As New Dictionary(Of Excel.Range, CellProp)(New RangeComparer())
キーはオブジェクトであるため、Equals/GetHashCode 関数をオーバーロードする必要があります。私の現在の実装は次のとおりです。
Class RangeComparer
Implements IEqualityComparer(Of Excel.Range)
Public Overloads Function Equals(ByVal x As Excel.Range, ByVal y As Excel.Range) As Boolean Implements IEqualityComparer(Of Excel.Range).Equals
If x.Address(External:=True) = y.Address(External:=True) Then
Return True
Else
Return False
End If
End Function
Public Overloads Function GetHashCode(ByVal obj As Excel.Range) As Integer Implements IEqualityComparer(Of Excel.Range).GetHashCode
Return obj.Count.GetHashCode
End Function
End Class
ただし、多数のセル (つまり、数百) を Dictionary に一度に追加すると、実行がかなり遅くなる可能性があります。最も重要なのは、これを行うためのより速い方法はありますか? 次に、Range の Count プロパティのハッシュ コードの取得が (ゆっくりではありますが) 機能しているように見えるのはなぜですか?