2013-02-19 23 views
5

Ich mache derzeit meine eigene sehr einfache generische Liste Klasse (um ein besseres Verständnis darüber, wie die vordefinierten funktionieren). Das einzige Problem, das ich habe, ist, dass ich die Elemente innerhalb des Arrays nicht erreichen kann, wie Sie es normalerweise mit "System.Collections.Generic.List" tun.generische Liste Klasse in C#

GenericList<type> list = new GenericList<type>(); 
list.Add(whatever); 

Dies funktioniert gut, aber wenn man versucht, den Zugriff auf „was“ Ich möchte in der Lage sein zu schreiben:

list[0]; 

Aber das offensichtlich nicht funktioniert, da ich eindeutig etwas fehlt bin Was muss ich im Code zu meiner ansonsten voll funktionsfähigen generischen Klasse hinzufügen?

+0

Was ist Ihr 'GenericList' Klasse tut aussehen wie? – LukeHennerley

+0

Eine Funktion, die in einer generischen Liste nützlich sein kann, ist eine Methode wie 'public void ActOnElement (int index, ActByRef proc, ref TP1 param1) {proc (ref Array [index], ref TP param1); } 'das ermöglicht Code direkt auf einem Listenelement zu handeln [annehmen 'öffentlichen Delegaten void ActByRef (ref T1 p1, ref T2 p2);']. Wenn man z.B. Eine 'GenericList ', solch eine Methode kann Code erlauben zu sagen 'myList.ActOnItem (index, (ref Rechteck r, ref int v) => {rX - = v; r.Breite + = v;}, ref widthAdjust)' um einen Listeneintrag "in-place" zu aktualisieren. – supercat

Antwort

12

Es ist ein indexer genannt, wie so geschrieben:

public T this[int i] 
{ 
    get 
    { 
     return array[i]; 
    } 
    set 
    { 
     array[i] = value; 
    } 
} 
+0

Ich vermute, dass das OP bedeuten kann, er bekommt "Nur Zuweisung, Aufruf, Inkrement, Dekrement und neue Objektausdrücke können als eine Aussage verwendet werden" beim Zugriff auf die Instanz von 'GenericList'? Offensichtlich, wenn er nicht einmal auf den Index zugreifen kann, dann ist Ihre Antwort in Ordnung :) – LukeHennerley

+0

@LukeHennerley Ich glaube, das OP suchte nach der Eigenschaftsdeklaration, die in ihren 'GenericList' Typ gesetzt wurde, so dass: eine Instanz von' GenericList List' gegeben wurde, Sie können auf ein Element innerhalb eines Indexers zugreifen, zB 'list [0]'. –

+0

Ich vermutete so viel, dachte nur darüber nach, wie das OP falsch interpretiert werden könnte. Wie auch immer, +1 :) – LukeHennerley

1

Ich glaube, alles, was Sie tun müssen, ist IList<T> zu implementieren, alle grundlegenden Funktionen erhalten

public interface IList<T> 
    { 

    int IndexOf(T item); 

    void Insert(int index, T item); 

    void RemoveAt(int index); 

    T this[int index] { get; set; } 
    }