unbox   zodpovězená otázka

VB.NET, Algoritmy, Optimalizace

Ahoj, dělám si funkci které chci parametrem předat pole stringu. Nevěděl jsem jak se předává pole parametrem, tak jsem pole zaboxoval jako object. Už se mi ale něják nepodařilo vyřešit jak proměnou unboxnout, aby mi z toho zase vylezlo pole. Můžete mi prosím poradit?

Vím že unbox se dělá takto:

casy = CType(casy, String)

jak ale docílit abych z toho měl pole?

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Snáď pomôže s tým parametrom

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim a(1) As String
        a(0) = "ano"
        a(1) = "nie"
        met(a)
    End Sub

    Private Sub met(ByVal str() As String)
        MsgBox(str(0) & "/" & str(1))
    End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za radu, teď už mi to funguje správně:)

A pokud by někdo věděl ještě ten druhý způsob (jak unboxnout object aby z něj bylo pole) rád se naučím ještě něco dalšího:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Abyste převedl Stringové pole do Stringu a zase zpět do pole (někdy je to zapotřebí), musíte si zvolit nějaký znak, který se v položkách pole rozhodně neobjeví (středník/vlnovka.. já používám ControlChars.Cr - enter). Potom projedete celé pole pomocí For Each a vložíte do výsledného řetězce vždy položku + váš znak:

Dim pole() As String = {"jedna", "dva", "tri", "ctyri"}
Dim vysledek As String = ""
Dim i As Integer = 0

For Each p As String In pole
    If i <> 0 Then vysledek += ControlChars.Cr 'Toto zajistí, že se rozdělovač vloží jen mezi položky
    vysledek += p 'Vložíme položku
    i += 1 'Přičteme...
Next p

Tento kód vám vygeneruje řetězec:

jedna
dva
tri
ctyri

a pro znovusložení do pole je třeba zavolat metodu Split:

Dim pole2() As String = vysledek.Split(ControlChars.Cr)

Hodně štěstí

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Namísto té smyčky pochopitelně postačí prosté

vysledek = Join(pole, ControlChars.Cr)
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, vyzkouším:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pozor na to, když napíšete jenom Join, použije se stará a pomalejší funkce z VB6. Lepší je použít String.Join, tato funkce součátí .NET frameworku a bude fungovat i v C#. Obecně je lepší používat jen funkce .NETu a zapomenout na přežitky ze starých verzí, pak člověk píše v C# a VB6 funkce tam prostě nejsou. Jedinou výjimkou, kterou používám, je MsgBox.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Teď koukám do Object Browseru a máte samozřejmě pravdu. To by mě fakt nenapadlo. Navíc, "nová" fce join má obráceně parametry. A s tou rychlostí je to na mém stroji tak, že "starý" Join trvá (pokud se provede 100 000 000 krát) 13,3 sekund, kdežto "nový" jen 8,1 sekund. To je cca 60% původního času, což je docela velké zrychlení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback