Laden...

VB: Array nachträglich initialisieren

Erstellt von Innocentus vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.845 Views
I
Innocentus Themenstarter:in
70 Beiträge seit 2009
vor 14 Jahren
VB: Array nachträglich initialisieren

Ich deklariere in meiner Klasse Folgendes:

Public varB() As SByte

Nun möchte ich später in einer Sub dieser Klasse den SByteArray mit 50 Einträgen initialisieren.
Wie geht das? - Ich möchte also aus varB() As SByte nachträglich ein varB(50) As SByte machen.

Vielen Dank für die Antworten im Voraus!
Mit freundlichen Grüßen
Innocentus

\V/ Coolness und ein langes Leben.

309 Beiträge seit 2007
vor 14 Jahren

Neu definieren ...

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

das geht gar nicht. Wenn eine Variable erstmal mit einem Typen deklariert wurde, kann man den nicht mehr ändern.

Baka wa shinanakya naoranai.

Mein XING Profil.

1.346 Beiträge seit 2008
vor 14 Jahren

Soweit ich weiß gibt es das ReDim Schlüsselwort dafür.

Gruß pdelvo

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Innocentus,

in C# ist die Größenangabe eines Array nicht - wie es in VB der Fall zu sein scheint - Teil der Typ-Deklaration, sondern wird erst beim Erzeugen des Array-Objekts angegeben. Daher kann man in C# einfach zu einem späteren Zeitpunkt ein neues Array-Objekt anderer Größe erzeugen.

Wenn du die Größe dynamisch haben willst, ist aber vermutlich die Verwendung von List<T> ohnehin günstiger.

Beachte bitte auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo Innocentus,

VB.NET hat sich diese schreckliche Altlast noch von den Vorgängerversionen abgeschaut. Grundsätzlich würde ich wie Herbivore vorgeschlagen eine Liste zu verwenden:


Public myList As List(SByte) = New List(SByte)()

(Kann eventuell leichte Syntax-Fehler beinhalten, weil VB.NET nicht mein täglich Brot ist)

Falls Du doch auf die klasischen Arrays angewiesen bist, dann hat pdelvo schon das richtige Stichwort "ReDim" gennant. Damit ist es möglich ein Array zu reinitialisieren und das auch mit einer neuen Größe (ist aber sehr schlechter Stil und vom alten VB abgeschaut!).

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

S
16 Beiträge seit 2009
vor 14 Jahren

hey,
wie pdelco schon erwähnt hat kannst du es in VB mit ReDim machen.

hier ein paar Beispiele: Beispiel

lg.

153 Beiträge seit 2007
vor 14 Jahren

hey,
wie pdelco schon erwähnt hat kannst du es in VB mit ReDim machen.

hier ein paar Beispiele:
>

lg. Damit sollte man aber vorsichtig sein, da das intern auch ein neues Array anlegt, die Daten umkopiert und die Referenz aufs alte Objekt wieder freigibt.

Daher, wie geschrieben, besser was anderes verwenden 😉

Grüße,
Chris

"Wenn Architekten genauso bauen würden, wie Programmierer programmieren, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören." (Steven Weinberg)

P
660 Beiträge seit 2008
vor 14 Jahren

...da das intern auch ein neues Array anlegt, die Daten umkopiert und die Referenz aufs alte Objekt wieder freigibt.

durch das ReDim verfahren gehen alle werte des arrays verloren da es NEU initialiseirt wird. kenne ich aus erfahrung nur zu gut.

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo UNeverNo,

nur dmit wirklich keine Missverständnisse entstehen. Es ist so wie ProGamer es geschrieben hat.

Ein "ReDim" ist analog zu einem "new" zu betrachten. Es ist rein aus historischen Gründen überhaupt noch vorhanden. Ein Umkopieren von Daten passiert definitiv nicht (wie soll das auch auch funktionieren, wenn ich eine andere Zielgröße habe?).

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo norman_timo,

wie soll das auch auch funktionieren, wenn ich eine andere Zielgröße habe?

also das übliche Verfahren wäre, dass die bestehenden Elemente an den Anfang des neuen Arrays kopiert werden, so wie das auch Array.Resize (das man auch in VB benutzen kann 😃 macht:

Zitat von: MSDN Array.Resize
Mit dieser Methode wird ein neues Array mit der angegebenen Größe reserviert, Elemente werden aus dem alten Array in das neue kopiert, und das alte Array wird durch das neue ersetzt.

Wenn newSize größer als Length des alten Arrays ist, wird ein neues Array zugeordnet, und alle Elemente werden aus dem alten Array in das neue kopiert. Wenn newSize kleiner als Length des alten Arrays ist, wird ein neues Array zugeordnet, und es werden Elemente aus dem alten Array in das neue kopiert, bis das neue Array aufgefüllt ist. Die verbleibenden Elemente im alten Array werden ignoriert. Wenn newSize gleich Length des alten Arrays ist, bleibt diese Methode wirkungslos.

herbivore

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo Herbivore,

danke für die Aufklärung, das habe ich aber auch schon anders gesehen??
Ich bin jetzt ehrlich gesagt ein Wenig verwirrt.

Aber es kann sein wie es ist, ein "ReDim" bleibt trotzdem schlechter Stil und sollte nicht verwendet werden (schon allein wegen der Lesbarkeit).

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”