02. februar 2004 - 21:26Der er
12 kommentarer og 2 løsninger
ArrayList over en Klasse
public class Vertex { public Vertex(float X, float Y, float Z) { x = X ; y = Y ; z = Z ; }
public float x; public float y; public float z; }
public class VertexList { public System.Collections.ArrayList Vertices = new System.Collections.ArrayList();
public Vertex getVertex( int ID ) { Vertex result = Vertices[ID]; return result; } }
"Cannot implicitly convert type 'object' to 'Vertex'"
Jeg kan godt ligge Vertex objecter ind i Array'en men ikke tage dem ud igen.. Kan man ikke på en måde lave en ArrayList over en bestemt type klasse? Jeg kunne sige: Vertex[] Vertices = new Vertex[]; Men det skal være en ArrayList.. Jeg har brug for funktioner som "Add", "RemoveAt" "Insert" som kun ligger i ArrayList.
class MainClass { public static void Main(string[] args) { MyList lst = new MyList(); lst.Add(new MyData(1)); lst.Add(new MyData(2)); lst.Add(new MyData(3)); for(int i = 0; i < lst.Count; i++) { MyData md = lst[i]; Console.WriteLine(md.V); } } }
public class MyList { private ArrayList al; public MyList() { al = new ArrayList(); } public void Add(MyData md) { al.Add(md); } public int Count { get { return al.Count; } } public MyData this[int ix] { get { return (MyData)al[ix]; } } } public class MyData { private int v; public MyData(int v) { this.v = v; } public MyData() { v = 0; } public int V { get { return v; } set { v = value; } } }
Type Caster var ret simpelt.. Er det nogen special grund til jeg skulle gøre det på nogen af de andre metoder.. Det kræver langt mere kodning kan jeg se.
Argh, det var jo et svar. (Jeg har aldrig helt fattet hvorfor alle de gamle exp-hajer laver deres svar som kommentarer herinde - medmindre det er fordi de glemmer at vælge svar ligesom mig...)
Mit eksempel er faktisk magen til dit bortset fra at jeg har brugt en indexer i.s.f. en Get metode (så har jeg også en Count property og en Add metode, men det må du også have).
Hvis du laver din egen collection enten ved at nedarve fra collectionbase eller som arne_v siger er du 1) fri for at caste 2) altid sikker på at din collection KUN indeholder objekter af typen Vertex - du kan ikke ved en fejl komme til at indsætte andre typer med efterfølgende invalidCastException.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.