Jag vill har en egendefinerad klass som jag vill lägga i en ArrayList. Klassen ser ut unefär så här: Objekten i en Arraylist är generiska och alltid av typen System.Object. Det innebär att för att kunna komma åt Test klassens medlemmar måste du göra en type cast av det generiska objektet. Tack för svaret, men finns det något sätt att unvika detta, så att man slipper skriva (Test) varje gång man ska ändra ett test objekt i en ArrayList? Kan man göra ett eget collection obekt, som fungerar som en ArrayList, men förväntar sig Test obekt? du måste göra en egen collection klass , läs om "typed collections"Egenskaper i collection med egna obekt
class Test
{
public string Text
get
{
return c_Text;
}
set
{
c_Text = value;
}
private string c_Text = "";
}
Mitt problem är att jag inte kommer åt Text egenskapen, när jag lägger Test i en ArrayList. Jag har försökt med detta:
class Tester
{
public void Main()
{
ArrayList Lista = new ArrayList();
Test TestObekt = new Test();
Lista.Add(TestObekt);
Lista[0].Text = "Hej"; //Detta fungerar inte
}
}
Jag meddelas att obektet Lista inte stöder egenskapen Text. Hur gör jag?
/JacobSv: Egenskaper i collection med egna obekt
<code>
class Tester
{
public void Main()
{
ArrayList Lista = new ArrayList();
Test TestObekt = new Test();
Lista.Add(TestObekt);
((Test)Lista[0]).Text = "Hej"; //Detta fungerar inte
}
}
</code>Sv: Egenskaper i collection med egna obekt
/JacobSv: Egenskaper i collection med egna obekt
men ett simpelt och dåligt exempel kan vara:
<code>
using System.Collections;
using TYPE=Test // ändra till tex. TYPE=System.Double om du vill ha en
// typad lista för double värden
public class MyCollection{
private ArrayList _List=new ArrayList();
public voic Add(TYPE item){
_List.Add(item);
}
public TYPE this[int index]{
get{
return (TYPE)_List[index];
}
}
public void Clear(){
_List.Clear();
}
}
</code>
nu kan du göra:
<code>
MyCollection mycol=new MyCollection();
Test t=new Test();
mycol.add(t);
Console.WriteLine(mycol[1].Text);
</code>
//Roger