Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[C#] Niet alle objecten uit InnerList worden verwijderd

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik ben bezig met het verwijderen van bepaalde objecten die ik wil verwijderen uit een InnerList

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public void deleteMail()
        {
            object o = null;
                for (int i = 0; i <= InnerList.Count; i++)
                {
                    if (((EmailMessage)InnerList[i]).CanDelete)
                    {
                        InnerList.RemoveAt(i);
                        if (ItemRemoved != null)
                            ItemRemoved(o, EventArgs.Empty);

                    }   
            }
        }


In het Emailmessage object bestaat een canDelete bool die ergens op true wordt gezet als dit het geval is dan moet de message worden verwijderd. En als er 1 mail in staat dan lukt het wel maar zogauw er meer als 1 inzitten dan laat ie er altijd 1 of meer staan. Ik heb al gekeken met debug wat er precies gebeurt maar kan er niet achter komen. Wat kan ik het beste doen om dit op te lossen

[ Voor 4% gewijzigd door Verwijderd op 17-11-2007 14:38 ]


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 21-10 20:21

Not Pingu

Dumbass ex machina

Hebben alle items wel CanDelete op true staan?

Dit:
code:
1
i <= InnerList.Count;


gaat trouwens niet werken omdat je index (i) zero-based is en Count 1-based. Dus:

code:
1
i < InnerList.Count;

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Topicstarter
Not Pingu schreef op zaterdag 17 november 2007 @ 14:49:
Hebben alle items wel CanDelete op true staan?

Dit:
code:
1
i <= InnerList.Count;


gaat trouwens niet werken omdat je index (i) zero-based is en Count 1-based. Dus:

code:
1
i < InnerList.Count;
Dat klopt die heb ik ook al verandert kreeg namelijk een exception. En heb ook gecontroleerd of alle bools op true stonden en dit was dan ook altijd het geval

  • whoami
  • Registratie: December 2000
  • Laatst online: 10:22
Dat is logisch als je je items van begin naar einde doorloopt en ondertussen verwijderd.
Stel je hebt 3 items in je list, je verwijderd er één van, dan is je Count niet meer 3, maar 2 etc...

Je lijst van achter naar voor doorlopen dus:
code:
1
2
3
4
5
for( int i = list.Count - 1; i >= 0; i-- )
{
   // blaat
   list.RemoveAt (i);
}

[ Voor 16% gewijzigd door whoami op 17-11-2007 15:19 ]

https://fgheysels.github.io/


  • SKiLLa
  • Registratie: Februari 2002
  • Niet online

SKiLLa

Byte or nibble a bit ?

Het probleem is dat als je .RemoveAt(i) doet, dat alle items dan natuurlijk naar voren opschuiven, terwijl je de counter i onvoorwaardelijk ophoogt. Op dat moment "skip" je er dus 1 ... een oplossing zou b.v. zijn: .RemoveAt(i--); (= verlaag i met 1 na het verwijderen) ...

'Political Correctness is fascism pretending to be good manners.' - George Carlin


Verwijderd

Topicstarter
Ok dankjewel voor de oplossingen zo simpel en toch kwam ik er neit op maar het werkt nu prima :)
Pagina: 1