For Each pre prehľadávanie pola stringov   zodpovězená otázka

VB.NET

Ahojte priatelia,

zaumienil som si, že použijem konštrukciu For Each pre prehľadávanie pola stringov.

For Each s As String In fgTableData(UBound(fgTableData)).columnName
     s = s.Replace(".c1fgName", String.Empty)
Next

Pričom columnName je pole stringov.

Všetko ide pekne scompilovať. Ibaže keď sa pozeram na hodnoty s cez debugger vypadá všetko super reťazec s je orezaný o .c1fgName. Ibaže sa to neprejaví do pola reťazcov .columnName.

Mám to chápať tak, že s polom reťazcov sa jednoducho ako s kolekciou objektov pracovať nedá. Nebol som si istý, je to skôr taký malý experiment.

Za vaše postrehy vopred ďakujem.

Ešte pod-otázka. Je jedno či používam UBound alebo .GetUpperBound?

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

Keď som to prepísal takto, tak to robí čo chcem

For q As Integer = 0 To fgTableData(UBound(fgTableData)).columnName.GetUpperBound(0)
    fgTableData(UBound(fgTableData)).columnName(q) = Replace(fgTableData(UBound(fgTableData)).columnName(q), ".c1fgName", String.Empty)
Next

Ale už to nie je také pekné.

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

Já bych místo UpperBound a podobných hovadin používal Length v polích nebo Count v kolekcích, ale to je věc zvyku, vyjde to nastejno.

Ve ForEach cyklu to nefunguje, protože vy si do proměnné s vytáhnete referenci na ten string (string je referenční typ) a pak ten string upravíte přes Replace (což vrací nový string). A referenci na nový string nahrajete do proměnné s, čímž se ta stará zahodí. Jenže už tím nezměníte tu referenci, která je v kolekci, takže to v kolekci ukazuje pořád na ten starý string.

V tomto případě prostě ForEach cyklus nepujde.

nahlásit spamnahlásit spam 1 / 1 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