Toon posts:

[VB.NET] variabele tijdens runtime creëren

Pagina: 1
Acties:

Verwijderd

Topicstarter
Tijdens de uitvoer van mijn programma wordt een teller bijgehouden. Aan de hand van
deze teller wil ik variabelen genereren. Dus indien teller = 2 moet het volgende gedaan worden
wanneer er bijvoorbeeld op een knop wordt geklikt:
Dim var &teller& = "waarde". Ik wil dus dat dan Dim var2 = "waarde" gedeclareerd wordt.

Nu krijg ik het alleen niet voor elkaar die variabele var2 te creëren.

Iemand een idee hoe ik dit aan kan pakken :? Van MSDN en google word ik niet veel
wijzer.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-04 18:28

Gerco

Professional Newbie

Je kunt waarschijnlijk het beste een ArrayList gebruiken:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Dim ar() As ArrayList = New ArrayList()

For i As Integer = 1 to 100
  ar.Add(i*2)
Next

For j as Integer = 1 to 100
  Console.WriteLine(ar(j))
Next


Dit compileert waarschijnlijk niet, omdat ik geen VStudio beschikbaar heb hier, maar je snapt het idee wel. Overigens is dit wel heel erg basic, misschien moet je een tutorial volgen.

[ Voor 14% gewijzigd door Gerco op 20-12-2005 14:00 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Als ik je goed begrijp, wil je dat als teller = 2 een variabele met de naam var2 wordt gemaakt, als teller = 4 is dat var4, etc.
Waarom wil je dit doen? Het is namelijk niet echt makkelijk te doen (of met een enorme overkill zoals Gerco voorstelt) en het kan in 9999 van de 10000 gevallen sneller, makkelijker en duidelijker. Uitzondering is bijvoorbeeld als je weet (zeker weet) dat teller nooit hoger wordt dan bijvoorbeeld 10, dan kan een array een snelle en makkelijke oplossing zijn.

Zo scherp als een voetbal!


  • NoReason
  • Registratie: Mei 2003
  • Laatst online: 21-04 16:45
Dim teller As Integer = 2
Dim hshTest As New System.Collections.Hashtable
hshTest.Add("var" & teller, "waarde")
komt zo het dichtste in de buurt van wat je wil denk ik...

[ Voor 25% gewijzigd door NoReason op 20-12-2005 14:13 ]

It's time to kick ass and chew bubble-gum, and I'm all out of gum.


Verwijderd

Topicstarter
Hmm, zo basic is dit volgens mij niet maar denk ik totaal de verkeerde kant op. Ik heb aan de hand van jullie posts nog eens nagedacht en denk dat mijn probleem ook op te lossen is door een array van arrays te definiëren.

Ik wilde namelijk aan elke tijdens runtime te genereren variabele een array hangen. Deze kan ik
natuurlijk ook met de teller elke keer een positie verder in een array zetten die ik dan ga
uitlezen :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 11:00

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op dinsdag 20 december 2005 @ 14:14:
Hmm, zo basic is dit volgens mij niet maar denk ik totaal de verkeerde kant op. Ik heb aan de hand van jullie posts nog eens nagedacht en denk dat mijn probleem ook op te lossen is door een array van arrays te definiëren.
Nee, als je echt die kant op wilt, zal je met CodeDom aan de slag moeten. Alleen op voorhand is inderdaad te gokken dat je compleet verkeerd zoekt :)
Ik wilde namelijk aan elke tijdens runtime te genereren variabele een array hangen. Deze kan ik
natuurlijk ook met de teller elke keer een positie verder in een array zetten die ik dan ga
uitlezen :)
Waarom? :) Wat wil je uiteindelijk bereiken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 20-04 18:28

Gerco

Professional Newbie

Reptile209 schreef op dinsdag 20 december 2005 @ 14:03:
het kan in 9999 van de 10000 gevallen sneller, makkelijker en duidelijker.
Inderdaad, met een array of ArrayList.
Uitzondering is bijvoorbeeld als je weet (zeker weet) dat teller nooit hoger wordt dan bijvoorbeeld 10, dan kan een array een snelle en makkelijke oplossing zijn.
Welke andere oplossingen dan een Array en ArrayList/HashTable/Dictionary had je in gedachten?

Zoveel overhead zit er nu ook weer niet op een ArrayList en aangezien de TS het over een knopje heeft, zal die extra paar nanoseconden die het kost om een ArrayList aan te maken het probleem wel niet zijn :) De ArrayList is een veel gebruikte en inderdaad niet heel snelle datastructuur, in GUI apps heb ik echter nog nooit gezien dat de performance van een knopje op een paar milliseconden keek.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
Oke, mijn uiteindelijke doel is het volgende:

ik heb een aspx formulier. In dit formulier moet klantinformatie ingevuld worden. Alleen
weet ik van tevoren niet voor hoeveel klanten dit gaat worden. (1 iemand kan bijvoorbeeld voor 20 klanten informatie invullen). Zodra de gegevens voor 1 klant zijn ingevuld moet er op add geklikt worden en worden de gegevens van klant 2 ingevuld. enz enz. Zodra alles ingevuld is moet er een mail gegenereerd worden waarin al deze klantinformatie staat. Ik denk er nu aan de klantinformatie
per klant in een array op te slaan. Deze array plaats ik dan in een dynamische array van de verschillende klanten.. Is dit slim?

  • Reptile209
  • Registratie: Juni 2001
  • Nu online

Reptile209

- gers -

Gerco schreef op dinsdag 20 december 2005 @ 14:16:
[...]

Inderdaad, met een array of ArrayList.


[...]

Welke andere oplossingen dan een Array en ArrayList/HashTable/Dictionary had je in gedachten?

Zoveel overhead zit er nu ook weer niet op een ArrayList en aangezien de TS het over een knopje heeft, zal die extra paar nanoseconden die het kost om een ArrayList aan te maken het probleem wel niet zijn :) De ArrayList is een veel gebruikte en inderdaad niet heel snelle datastructuur, in GUI apps heb ik echter nog nooit gezien dat de performance van een knopje op een paar milliseconden keek.
Ik had nog geen specifieke oplossingen in gedachten :). Alleen vanuit algemeen programmeer oogpunt is een genummerde variabele (en dan met het nummer in de naam) niet de handigste oplossing. Ongeacht hoe snel je runtime is en hoe oneindig groot je geheugen, het is imho niet netjes om bijvoorbeeld een array van 1 tot 1 miljoen te definieren omdat je daar misschien 3 nummertjes uit gaat gebruiken. Dan kan het vast wel makkelijker. Alleen met een zeer kleine range (zeg 1-10) kan ik me voorstellen dat je je de moeite bespaart.

Zo scherp als een voetbal!


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 18-12-2025
Verwijderd schreef op dinsdag 20 december 2005 @ 14:23:
Oke, mijn uiteindelijke doel is het volgende:

ik heb een aspx formulier. In dit formulier moet klantinformatie ingevuld worden. Alleen
weet ik van tevoren niet voor hoeveel klanten dit gaat worden. (1 iemand kan bijvoorbeeld voor 20 klanten informatie invullen). Zodra de gegevens voor 1 klant zijn ingevuld moet er op add geklikt worden en worden de gegevens van klant 2 ingevuld. enz enz. Zodra alles ingevuld is moet er een mail gegenereerd worden waarin al deze klantinformatie staat. Ik denk er nu aan de klantinformatie
per klant in een array op te slaan. Deze array plaats ik dan in een dynamische array van de verschillende klanten.. Is dit slim?
Waarom dan niet van de klant een object gemaakt en deze opgeslagen in een array? Zodat je dus een array van objecten krijgt.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Reptile209 schreef op dinsdag 20 december 2005 @ 14:27:
[...]

Ongeacht hoe snel je runtime is en hoe oneindig groot je geheugen, het is imho niet netjes om bijvoorbeeld een array van 1 tot 1 miljoen te definieren omdat je daar misschien 3 nummertjes uit gaat gebruiken. Dan kan het vast wel makkelijker. Alleen met een zeer kleine range (zeg 1-10) kan ik me voorstellen dat je je de moeite bespaart.
Dat heb je met een ArrayList toch ook niet, die is auto-growing. Hij is ongeveer 10% groter dan je inhoud. Niet echt erg dus.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-04 17:18
questa schreef op dinsdag 20 december 2005 @ 15:34:
[...]


Dat heb je met een ArrayList toch ook niet, die is auto-growing. Hij is ongeveer 10% groter dan je inhoud. Niet echt erg dus.
Een arraylist start met een 'initiele capaciteit'. Ik geloof dat dat default 15 is.
Als je buiten die 'count' gaat, dan wordt de capaciteit verdubbeld.

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op dinsdag 20 december 2005 @ 14:23:
Oke, mijn uiteindelijke doel is het volgende:

ik heb een aspx formulier. In dit formulier moet klantinformatie ingevuld worden. Alleen
weet ik van tevoren niet voor hoeveel klanten dit gaat worden. (1 iemand kan bijvoorbeeld voor 20 klanten informatie invullen). Zodra de gegevens voor 1 klant zijn ingevuld moet er op add geklikt worden en worden de gegevens van klant 2 ingevuld. enz enz. Zodra alles ingevuld is moet er een mail gegenereerd worden waarin al deze klantinformatie staat. Ik denk er nu aan de klantinformatie
per klant in een array op te slaan. Deze array plaats ik dan in een dynamische array van de verschillende klanten.. Is dit slim?
Maak dan idd gewoon een Klant object met alle gegevens en voeg die toe aan een of andere lijst ( Array is niet zo handig aangezien je niet weet hoeveel elementen je krijgt. )

bijvoorbeeld iets als dit
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Klant
{
    private string _naam;
    private string _adres;

    public Klant( string naam, string adres ){
        _naam = naam;
        _adres = adres;
    }

    public string Naam{
        get{ return _naam; }
    }

    public string Adres{
        get{ return _adres; }
    }
}

public class MyPage : Page{
    private ArrayList _klanten = new ArrayList();
    protected TextBox txtNaam;
    protected TextBox txtAdres;
    
    public void BtnAdd_Click( object sender, EventArgs e ){
        string naam = txtNaam.Text;
        string adres = txtAdres.Text;
        Klant klant = new Klant( naam, adres );
        _klanten.Add( klant );
    }
}

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

whoami schreef op dinsdag 20 december 2005 @ 15:39:
[...]


Een arraylist start met een 'initiele capaciteit'. Ik geloof dat dat default 15 is.
Als je buiten die 'count' gaat, dan wordt de capaciteit verdubbeld.
Hij verdubbelt inderdaad als ik zo under de hood kijk en de init capacity is 16 :)
Het was de Queue die een grow factor had, even in de war.
Pagina: 1