Toon posts:

[C#] Custom object uit ArrayList halen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste tweakers,

Ik zit met het volgende probleem:
Ik heb een ArrayList die gevuld wordt met een eigen gedefinieerd object, zodra ik dit object er weer uit probeer te halen gaat het mis:
code:
1
2
3
for ( int i = 0; i < this.fields.Count; i++ ) {
    importField field = (importField)this.fields[i];
}

de ArrayList this.fields bestaat dus uit een lijst van importFields en voor zover ik weet zou ik die op deze manier weer in een variabele van dit type moeten kunnen krijgen. Wanneer ik dit echter probeer te testen krijg ik de melding "Specified cast is not valid". Dit vind ik enigsinds vreemd aangezien de ArrayList 100% zeker met importFields gevuld is. Nu lijkt het me dat dit te maken heeft met het casten van een eigen gedefinieerd type, maar na even gegoogled te hebben kom ik toch elke keer gewoon op deze syntax uit. Kan iemand mij vertellen wat ik fout doe?

  • TweakerNummer
  • Registratie: September 2001
  • Niet online
Loop er liever met een foreach doorheen?

foreach (importField field in fields)
{
....
}

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Als je C# 2.0 gebruikt zou ik een Collection<T> gebruiken icm een foreach:
C#:
1
2
3
4
5
6
Collection<importField> fields = new Collection<importField>();

foreach(importField field in fields)
{
    // Doe iets met field
}


Voor C# 1.1 kun je zoiets doen:
C#:
1
2
3
4
5
6
7
8
9
importField field = null;
for(int i = 0; i < this.fields.Length; i++)
{
    field = this.fields[i] as importField;
    if(field != null)
    {
        // Doe iets met field
    }
}

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Met een foreach blijf ik de "Specified cast is not valid" foutmelding houden. Lijkt me eerlijk gezegd ook niet uitmaken of ik nou een foreach of een for loop gebruik alleen is foreach misschien iets korter. Misschien even voor de duidelijkheid, de ArrayList wordt op de volgende manier gevuld wat verder ook geen problemen oplevert:
code:
1
2
3
4
5
6
importField ifield = new importField();
ifield.field = field;
ifield.col = col;
ifield.type = type;
ifield.isPk = isPk;
this.fields.Add( ifield );


Hmmm, beetje stom van mij 8)7 , ik zie dat ik een functie parameter in de ArrayList stopte in plaats van het importField... Dat lost natuurlijk een hele hoop op...

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
De code die je hebt lijkt op het eerste gezicht gewoon goed. Loop er gewoon eens met je debugger door heen. Blijkbaar zit er toch wat anders in je ArrayList als een "importField".

Verder kan je in .net 2.0 idd beter de Generic varianten van de collections gebruiken.

“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.”


Verwijderd

Topicstarter
ja je hebt gelijk, de ifield die ik hierboven in de add stopte was voorheen gewoon de functie param field, en dat was een string. Vrij logisch dus opzich dat ik niet van een string naar een importField kon casten. But thanks anyways.

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Verwijderd schreef op maandag 02 oktober 2006 @ 15:17:
ik zie dat ik een functie parameter in de ArrayList stopte in plaats van het importField... Dat lost natuurlijk een hele hoop op...
Daarom gaf ik voor het 1.1 voorbeeld ook een regel met het as keyword, die zorgt ervoor dat er gecast wordt als dat mogelijk is (dwz dat this.fields[i] van het type importField is) en anders null terug geeft.

Nu met Land Rover Series 3 en Defender 90

Pagina: 1