Jag får inte ihop det här med Collections trots massa försök. Jag vill helt enkelt fylla en Collection med objekt av en egendefinierad klass och sen kunna komma åt deras metoder osv. Med strängar, tal osv går allt bra, men jag kan inte komma åt objekten om det är en klass jag gjort. Rasmus, Ok, tack för svaret. Jag hade visst gjort en liten dumhet men det är fixat. Den andra delen av min fråga undrar jag fortfarande över. Rasmus, Såhär är det, jag håller på och lära mig om AI och jag har då en simulerad värld där det finns flera hundra objekt av typen animal. Programmet skall då gå igenom varje djur och låta den bestämma vad den skall göra. Det gör den (bl.a.) genom att läsa av egenskaper hos alla de andra djuren. Därefter kan den föröka sig, äta upp andra djur osv. Jag kommer alltså ha en avläsningsloop i huvudklassen och en hos varje djur som gör något. Samtidigt kommer populationen hela tiden förändras. Eftersom en IEnumerator tydligen inte klarar att ArrayListen förändras så vet jag inte hur jag skall göra detta. Lösningen måste vara så snabbsom möjligt eftersom detta skall göras VÄLDIGT många gånger. Förslag någon? Rasmus. Jag skrev en artikel om kollektioner för ett tag sedan: Du kan ha ett problem med låsningar. Collections och egna objekt
Sv: Collections och egna objekt
När du hämtar ut ett objekt från en Collection så måste du typkonvertera det till samma typ som du stoppade in, innan du kan använda dess metoder osv. Anledning till detta är i .NET 1.x så använder collection klasserna typen <b>Object</b> som returtyp - denna saknar dina metoder mm.Sv:Collections och egna objekt
Jag skriver nu
<code>
System.Collections.IEnumerator noIdeaWhatThisIs =callingClass.population.GetEnumerator();
animal tempAnimal=(animal)noIdeaWhatThisIs.Current;
</code>
Och då får jag det där felet med "object blabla instance blabla reference". Men population är laddat och jag kan inte göra en ny IEnumerator. Såhär är population deklarerad:
<code>
ArrayList population=new ArrayList();
</code>
Gör jag något dumt?
Det här är en grej jag kommer göra väldigt många gånger och det känns lite dumt att göra så mycket temporära grejer. Finns det något bättre sätt tror ni?Sv: Collections och egna objekt
Sv:Collections och egna objekt
Ska du bara ta ut första objektet i en collection? Isf kan du använda din collections <b>Indexer</b>
Animal temp = (Animal)callingClass.population[0];
om du ska loopa igenom så kan du t.ex använda en <b>foreach</b> loop istället.
Sv: Collections och egna objekt
Sv:Collections och egna objekt
Sök lite efter "Strongly typed collection" på nätet.
Om du använder dig av en collection som är typad till t.ex. Animal så kan du bara lagra instanser av klassen Animal i den.
Om du inte använder en typad collection så kan du ju söka igenom din collection efter alla Animals
genom.
foreach(Animal animal in DinCollection)
{
//Gör något med animal
}
JanneSv: Collections och egna objekt
http://www.cshrp.net/content.aspx?showID=901Sv:Collections och egna objekt
Och om du tar bort objekt under tiden du jobbar med collectionen kan du inte köra med for (int i = 0 ; i < list.count; i++) eftersom list.count redan utvärderats och inte kommer att vara sann. Kör en foreach (som redan rekommenderats, eller jobba dig bakifrån i listan.
Om du riskerar att anropa samma lista från flera ställen (om du använder dig av multitrådning) får du nog titta närmare på om du borde låsa din lista (lock (list)), annars kan du råka läsa från och ta bort ett objekt på samma gång.
/Emma