Avatar billede mrbonus Novice
20. juni 2006 - 17:05 Der er 2 kommentarer og
1 løsning

Konverter object array med string arrays, til dobbel string array

Jeg viser noget kode og forklarer derefter

Dim arrayList As New ArrayList
Dim i As Integer

Dim astrTmp(1, 1) As String
astrTmp(0, 0) = "0"
astrTmp(0, 1) = "1"
astrTmp(1, 0) = "2"
astrTmp(1, 1) = "3"

For i = 0 To astrTmp.GetUpperBound(0)
    Dim arr(1) As String
    arr(0) = astrTmp(i, 0)
    arr(1) = astrTmp(i, 1)
    arrayList.Add(arr)
Next

Dim arr1(1) As String
Dim objectArray() As Object = arrayList.ToArray(arr1.GetType())
Dim dobbeltArr(,) As String = CType(objectArray, String(,))


Det er de sidste 3 linier der er interessante, for selvom det er et object array er hvert object et string array.
Jeg kontrollerede dette i debug time, men den vil ikke lade mig typecaste et enkelt array til et dobbeltarray selv det faktisk er et dobbeltarray.

Hvordan løser jeg dette problem, eller hvordan kan man ellers lave det smart, helst ikke noget med at løbe igennem objectarray og typecaste hver eneklt object til et string array.
Avatar billede arne_v Ekspert
20. juni 2006 - 19:00 #1
arrayList.ToArray returnerer ikke et to dimensionelt array men derimod
et array af arrays

foelgende kode virker:

Imports System
Imports System.Collections

Module Main
    Sub Main()
        Dim arrayList As New ArrayList
        Dim i As Integer
        Dim astrTmp(1, 1) As String
        astrTmp(0, 0) = "0"
        astrTmp(0, 1) = "1"
        astrTmp(1, 0) = "2"
        astrTmp(1, 1) = "3"
        For i = 0 To astrTmp.GetUpperBound(0)
            Dim arr(1) As String
            arr(0) = astrTmp(i, 0)
            arr(1) = astrTmp(i, 1)
            arrayList.Add(arr)
        Next
        Dim arr1(1) As String
        Dim objectArray() As Object = arrayList.ToArray(arr1.GetType())
        'Dim dobbeltArr(,) As String = CType(objectArray, String(,))
        Dim jigsawArray()() As String = CType(objectArray, String()())
        Console.WriteLine(jigsawArray(0)(0))
        Console.WriteLine(jigsawArray(0)(1))
        Console.WriteLine(jigsawArray(1)(0))
        Console.WriteLine(jigsawArray(1)(1))
    End Sub
End Module
Avatar billede mrbonus Novice
21. juni 2006 - 08:20 #2
Fremragende. giver jo også mening hvis man tænker over det. hvis du sender et svar får du pointene.
Avatar billede arne_v Ekspert
21. juni 2006 - 13:22 #3
kommer her
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