Возможно ли обратиться к элементу HashTable по его ключу, если ключ - это экземпляр собственного класса.
Чтобы прояснить, что же я сам спросил, приведу код:
Есть модуль с тремя классами:
cPoint - координаты ячейки (индекс строки и столбца)
cCell - основные характеристики ячейки - координаты, текст
cSheet - рабочий лист (семейство заполненных текстом ячеек)
- Код: Выделить всё
Module TestModule
Public Class cPoint
'координаты ячейки
Dim _Row As Integer
Dim _Col As Integer
Public Property Row() As Integer
Get
Row = _Row
End Get
Set(ByVal Value As Integer)
_Row = Value
End Set
End Property
Public Property Col() As Integer
Get
Col = _Col
End Get
Set(ByVal Value As Integer)
_Col = Value
End Set
End Property
End Class
Public Class cCell
'основные характеристики ячейки - координаты, текст
Dim _Point As cPoint
Dim _Text As String
Public Sub New(ByVal Pt As cPoint, ByVal str As String)
Me.Point = Pt
Me.Text = str
End Sub
Public Sub New()
End Sub
Public Property Point() As cPoint
Get
Point = _Point
End Get
Set(ByVal Value As cPoint)
_Point = Value
End Set
End Property
Public Property Text() As String
Get
Text = _Text
End Get
Set(ByVal Value As String)
_Text = Value
End Set
End Property
End Class
Public Class cSheet
'рабочий лист (семейство заполненных текстом ячеек)
Dim _htCell As New Hashtable
Public Sub Add(ByVal Cl As cCell)
_htCell.Add(Cl.Point, Cl)
End Sub
Public Function Item(ByVal iRow As Integer, ByVal iCol As Integer)
Dim Pt As New cPoint
Dim Cl As New cCell
Pt.Col = iCol
Pt.Row = iRow
'Имеем экземпляр Pt типа cPoint
'В хештаблице точно есть экземпляр с аналогичным ключем 0;0.
'Как обратиться к значению???
If _htCell.ContainsKey(Pt) Then MsgBox("Exists point with row: " & Pt.Row.ToString & " and col: " & Pt.Col.ToString)
Cl = _htCell.Item(Pt) 'получаем Nothing
End Function
End Class
End Module
Запускаем тестирование:
- Код: Выделить всё
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim Cl(2) As cCell
Dim ClTmp As cCell
Dim i As Integer
Dim St As New cSheet
Dim Pt As cPoint
Dim iRow As Integer = 0
For i = LBound(Cl) To UBound(Cl)
Pt = New cPoint
Pt.Col = i
Pt.Row = iRow
Cl(i) = New cCell(Pt, Chr(i + 65) & iRow.ToString)
St.Add(Cl(i))
Next
'точно знаем, что в хештаблице есть элементы с ключами 0;0, 0;1, 0;2
Pt = New cPoint
Pt.Col = 0
Pt.Row = 0
ClTmp = St.Item(Pt.Row, Pt.Col)
End Sub