in C#

2013-02-19 11 views
5

Attualmente sto creando la mia semplice base di elenco generica (per ottenere una migliore comprensione di come funzionano quelle predefinite). L'unico problema che ho è che non riesco a raggiungere gli elementi all'interno dell'array, come si fa normalmente con "System.Collections.Generic.List".in C#

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

Questo funziona bene, ma quando si cerca di accedere a "qualunque" Voglio essere in grado di scrivere :

list[0]; 

ma che ovviamente non funziona dal momento che sto chiaramente manca qualcosa nel codice, cosa devo aggiungere alla mia classe generica altrimenti completamente funzionante?

+0

cosa fa il tuo classe 'GenericList' Assomiglia a? – LukeHennerley

+0

Per inciso, una caratteristica che può essere utile in una lista generica è un metodo come "public void ActOnElement (int index, ActByRef proc, ref TP1 param1) {proc (ref Array [index], ref TP param1); } 'che consentirà al codice di agire direttamente su una voce di elenco [presupponete 'delegato pubblico void ActByRef (ref T1 p1, ref T2 p2);']. Se uno ha per es. a 'GenericList ', tale metodo può consentire al codice di dire 'myList.ActOnItem (index, (ref Rectangle r, ref int v) => {rX - = v; r.Width + = v;}, ref widthAdjust)' per aggiornare un elemento della lista "sul posto". – supercat

risposta

12

Si chiama indexer, scritta in questo modo:

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

Sospetto che l'OP possa significare che sta ricevendo "Solo assegnazione, chiamata, incremento, decremento e nuove espressioni oggetto possono essere usate come una dichiarazione" quando si accede all'istanza di 'GenericList'? Ovviamente se non riesce nemmeno ad accedere all'indice allora la tua risposta va bene :) – LukeHennerley

+0

@LukeHennerley Credo che l'OP cercasse la dichiarazione di proprietà da inserire nel proprio tipo 'GenericList' tale che: data un'istanza di' Lista lista generica', possono accedere a un elemento al suo interno usando un indicizzatore, ad es. 'lista [0]'. –

+0

Lo sospettavo, stavo solo pensando a come l'OP poteva essere interpretata male. Ad ogni modo, +1 :) – LukeHennerley

1

Penso che tutto quello che dovete fare è implementare IList<T>, per avere tutte le funzionalità di base

public interface IList<T> 
    { 

    int IndexOf(T item); 

    void Insert(int index, T item); 

    void RemoveAt(int index); 

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