Avatar billede mikkeljans Nybegynder
02. februar 2004 - 21:26 Der 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.
Avatar billede arne_v Ekspert
02. februar 2004 - 21:39 #1
Du type caster bare !
Avatar billede arne_v Ekspert
02. februar 2004 - 21:39 #2
public    Vertex getVertex( int ID )
    {
        Vertex result = (Vertex)Vertices[ID];
        return result;
    }
Avatar billede jepsen999 Nybegynder
02. februar 2004 - 21:41 #3
nedarv fra collectionbase
Avatar billede arne_v Ekspert
02. februar 2004 - 21:41 #4
Overvej også at bruge en indexer i.s.f. en Get metode.
Avatar billede arne_v Ekspert
02. februar 2004 - 21:41 #5
Komplet eksempel (lavet til andet formål):

using System;
using System.Collections;

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;
        }
    }
}
Avatar billede jepsen999 Nybegynder
02. februar 2004 - 21:44 #6
og tilføj metoderne add,remove,...

public class VertexCollection:System.Collections.CollectionBase{

public void Add(Vertex vertex){
  this.List.Add(vertex);
}
public void Remove(Vertex vertex){
  this.List.Remove(vertex);
}

public Vertex this[int index]{
  get{return (Vertex)this.List[index];}
  set{this.List[index] = Value;}
}

Der kan også laves removeat og insertAt mm. på den "indre" List
}
Avatar billede mikkeljans Nybegynder
02. februar 2004 - 21:53 #7
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.
Avatar billede jepsen999 Nybegynder
02. februar 2004 - 21:55 #8
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...)
Avatar billede arne_v Ekspert
02. februar 2004 - 21:57 #9
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).
Avatar billede arne_v Ekspert
02. februar 2004 - 21:58 #10
Resten er bare en data klasse som skal indsættes og et test program.
Avatar billede arne_v Ekspert
02. februar 2004 - 21:58 #11
Og et svar
Avatar billede jepsen999 Nybegynder
02. februar 2004 - 21:59 #12
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.

Og SÅ meget kode er det da heller ikke ;)
Avatar billede mikkeljans Nybegynder
02. februar 2004 - 22:04 #13
Okay, tak for hjælpen
Avatar billede jepsen999 Nybegynder
02. februar 2004 - 22:24 #14
Selv tak !
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester