Avatar billede funkyloonie Nybegynder
29. august 2002 - 19:41 Der er 2 kommentarer og
1 løsning

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
Avatar billede funkyloonie Nybegynder
29. august 2002 - 21:10 #1
lukker.
Avatar billede odegaard Nybegynder
29. august 2002 - 22:38 #2
Du kan jo ikke caste fra et "object". Hvad er f.eks. heltals værdien af en appelsin ? Nej det giver ikke mening vel?
Avatar billede funkyloonie Nybegynder
29. august 2002 - 22:46 #3
Jeg fandt ud af at klasse ListRefbased ikke virkede som jeg ønskede. derfor fik jeg fejlen. Jeg har fået mit problem løst, dog virker ListRefbased ikke ordentligt endnu. Men det er så et nyt problem...

Listen skulle være en ref baseret kædet liste. Dog ikke cirkulær som den jeg har postet her. Mit problem er nu at listens sidste element ikke kan acceptere en reference som er nothing til den næste node. Måske skal jeg have et element som hale på kæden... for altså at løse problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester