Toon posts:

[vb.net] array van structure

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een structure

code:
1
2
3
4
    Private Structure FileData
        Dim FileName As String  
        Dim FullPathName As String 
    End Structure


en een array

code:
1
    Dim FileDataArray() As FileData



En als ik dan verderop in een sub zeg:

code:
1
  FileDataArray(IndexForArray).FileName = "test"



IndexForArray is een integer die begint op 0


Krijg ik de melding:
code:
1
2
3
An unhandled exception of type 'System.NullReferenceException' occ..

Additional information: Object reference not set to an instance of an object.


Maar die foutmelding snap ik niet helemaal.... Vond er wel iets over hier in het forum:

[rml][ VB.NET] Gebruik Types/+Arrays/Collections[/rml]

en volgens mij is dat hetzelfde probleem, maar daar zeggen ze toch volgens mij dat het zo moet kunnen?

waarom gaat het dan fout?

[ Voor 8% gewijzigd door Verwijderd op 24-04-2003 15:22 ]


Verwijderd

Je moet voor ieder element uit je array het object wel aanmaken
code:
1
2
FileDataArray(IndexForArray) = new FileData
FileDataArray(IndexForArray).FileName = "test"

  • whoami
  • Registratie: December 2000
  • Nu online
Je wilt schrijven naar of lezen van een geheugenplek die niet gealloceerd is.

Je zult eerst een nieuw object moeten toewijzen aan die positie in de array, vooraleer je er naar kunt lezen. Je zult je array moeten alloceren, want ik geloof dat je dat nog niet gedaan hebt.
Hoe je dat precies in VB.NET weet ik niet, maar ik geloof dat het in C# als volgt gaat:
code:
1
FileData[] myArray = new FileData[5];

Hiermee alloceer je dus geheugen voor een array van 5 FileData elementen.

Daarna zal je wellicht nog eens expliciet moeten geheugen alloceren per element. (Alhoewel ik niet zeker weet of je dat bij structures ook moet doen)
code:
1
FileData[0] = new FileData();

[ Voor 17% gewijzigd door whoami op 24-04-2003 15:28 ]

https://fgheysels.github.io/


Verwijderd

je moet nog aangeven hoeveel items je wilt in je array, zoiets dus:

Dim FileDataArray(aantal) As FileData

Verwijderd

Topicstarter
code:
--------------------------------------------------------------------------------
FileDataArray(IndexForArray) = new FileData
FileDataArray(IndexForArray).FileName = "test"

--------------------------------------------------------------------------------

Dat heb ik geprobeerd, maar de melding blijft hetzelfde... dit leek me het meest logisch op zich, gewoon per element een ding aanmaken... maarja


Dim FileDataArray(aantal) As FileData

Als ik dat doe werkt het inderdaad, maar misschien ben ik heel gek maar ff wat de bedoeling is:

ik lees een directory uit met alle subdirs en zet alle bestanden in een treeview, maar wil ze ook in een structure...

Ik weet natuurlijk niet van te voren hoeveel bestanden er zijn?! dus kan ik moeilijk daar al bv. 10 in gaan vullen als het er dalijk 100 zijn....

Zelfde geldt natuurlijk voor het voorbeeld in C.

Of begrijp ik dat aantal nou verkeerd?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Dan moet je dus geen array gebruiken, maar een dynamische datastuctuur als een Collection of een linked list.

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


  • whoami
  • Registratie: December 2000
  • Nu online
Je kunt natuurlijk ook een ArrayList gaan gebruiken. Dat is veel beter dan een gewone array.

Een ArrayList groeit naarmate er meer elementen nodig zijn en kan je makkelijk gebruiken.

code:
1
2
3
ArrayList myArray = new ArrayList(15); //initieel 15 elementen bv.

myArray.Add (myObject);

Op die manier alloceer je dus een arraylist en voeg je objecten toe.
Als , in dit voorbeeld, het maximum van 15 overschreden wordt, dan zal de ArrayList dynamisch uitgebreid worden met x aantal plaatsen. (ik weet nu niet of hij gaat verdubbelen (dus van 15 naar 30, of van 15 naar 22 of 23 gaat gaan).

Zoek eens in de help op ArrayList.

[ Voor 24% gewijzigd door whoami op 24-04-2003 15:43 ]

https://fgheysels.github.io/

Pagina: 1