Caste med CType
Jeg et problem med at caste objekter i vb .net. Jeg vedlægger samtlig (håber ikk det er for meget) kode for at vise alt hvis det er en eller anden mærkelig fejl jeg har lavet.Fejlen jeg får er i denne linie "t = CType(list.getNode(1), Integer)" og lyder "An unhandled exception of type 'System.InvalidCastException' occurred in microsoft.visualbasic.dll
Additional information: Cast from type 'Object' to type 'Integer' is not valid.
"
Her er koden:
Public Class Form1
Inherits System.Windows.Forms.Form
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim list As New ListRefbased()
Dim tal As New Integer()
Dim t As New Integer()
tal = 3
list.add(1, tal)
t = CType(list.getNode(1), Integer)
MsgBox(t.ToString)
End Sub
End Class
Public Interface ListInterface
Function isEmpty() As Boolean
ReadOnly Property size() As Integer
Sub add(ByVal index As Integer, ByVal item As Object)
Sub remove(ByVal index As Integer)
Sub removeAll()
Function getNode(ByVal index As Integer) As Object
End Interface
Public Class ListRefbased
Implements ListInterface
Private Head, Dummy As Node
Private NumItems As Integer
Sub New()
NumItems = 0
Head = Nothing
Dummy = New Node(New Object(), Nothing)
Head = Dummy
Dummy.NextNode = Dummy
End Sub
Function isEmpty() As Boolean Implements ListInterface.isEmpty
Return (NumItems = 0)
End Function
ReadOnly Property size() As Integer Implements ListInterface.size
Get
Return NumItems
End Get
End Property
Sub add(ByVal index As Integer, ByVal item As Object) Implements ListInterface.add
If (index >= 1 And index <= NumItems + 1) Then
Dim prev = find(index - 1)
Dim newNode = New Node(item, prev.NextNode)
prev.NextNode = newNode
NumItems += 1
End If
End Sub
Sub remove(ByVal index As Integer) Implements ListInterface.remove
Dim prev = find(index - 1)
Dim curr = prev.NextNode
prev.NextNode = curr.NextNode
NumItems -= 1
End Sub
Sub removeAll() Implements ListInterface.removeAll
Dummy = New Node(Nothing)
Head = Dummy
NumItems = 0
End Sub
Function getNode(ByVal index As Integer) As Object Implements ListInterface.getNode
Dim curr = find(index)
Return curr.Item
End Function
Private Function find(ByVal index As Integer)
Dim curr As Node
Dim skip As Integer
curr = Head
For skip = 0 To index Step 1
curr = curr.NextNode
Next
Return curr
End Function
End Class
Public Class Node
Private n_Item As Object
Private n_NextNode As Node
Sub New(ByVal newItem As Object)
n_Item = newItem
n_NextNode = Nothing
End Sub
Sub New(ByVal newItem As Object, ByVal nextNod As Node)
n_Item = newItem
n_NextNode = nextNod
End Sub
Public Property Item() As Object
Get
Return n_Item
End Get
Set(ByVal Value As Object)
n_Item = Value
End Set
End Property
Public Property NextNode() As Node
Get
Return n_NextNode
End Get
Set(ByVal Value As Node)
n_NextNode = Value
End Set
End Property
End Class
