2009-08-28 15 views
16

C'è un modo particolare per inizializzare uno IList<T>? Questo non sembra funzionare:Inizializza IList <T> C#

IList<ListItem> allFaqs = new IList<ListItem>(); 
// Error I get here: Cannot create an instance of the interface 'IList<ListItem>' 

ReSharper suggerisce per inizializzare in questo modo:

IList<ListItem> allFaqs = null; 

Ma non sarà che causare un'eccezione Null riferimento quando vado per aggiungere elementi a questa lista?

O dovrei semplicemente usare List<ListItem>?

Grazie!

risposta

40

L'errore si verifica perché si sta tentando di creare un'istanza dell'interfaccia .

modificare il codice per:

List<ListItem> allFaqs = new List<ListItem>(); 

o

IList<ListItem> allFaqs = new List<ListItem>(); 

e dovrebbe compilare.

Ovviamente dovrai cambiare anche il resto del codice.

+0

mi ha risparmiato un sacco di tempo, grazie :) – Sijav

2

quello che devi fare:

IList<ListItem> allFaqs = new List<ListItem>(); 

Nel codice che si sta tentando di inizializzare un'interfaccia.

2

IList è un'interfaccia quindi non è possibile istanziarlo. Tutti i tipi di classi implementano IList. Una di queste classi che implementa IList è List. Puoi istanziarlo in questo modo:

List<ListItem> allFaqs = new List<ListItem>(); 
17

Il tuo problema è che IList è un'interfaccia, non una classe. Non è possibile inizializzare un'interfaccia.

Si può avere un'istanza di un'interfaccia, ma è necessario inizializzare con una classe che implementa l'interfaccia come ad esempio:

IList<string> strings = new List<string>(); 

La riga precedente di codice funzionerà, ma si avrà solo il membri di IList disponibili per te al posto del set completo di qualsiasi classe inizializzata.

+1

Bene, è possibile se imbrogliare ;-p http://stackoverflow.com/questions/194484#1281522 –

+0

+1 per il trucco! grazie Marc – Anders

2

Non è possibile creare un'istanza di un'interfaccia (IList è un'interfaccia).

Si avrebbe bisogno di creare un'istanza di qualcosa che implementa un IList,

in questo modo:

IList<ListItem> allFaqs = new List<ListItem>(); 

Ci sono altri tipi di ILists, ma List è una buona per iniziare.

1

IList<T> è un'interfaccia.È necessario creare un'istanza di una classe che implementa l'interfaccia:

IList<ListItem> allFaqs = new List<ListItem>(); 

List<T> implementa IList<T>, e quindi può essere assegnato alla variabile. Esistono anche altri tipi che implementano anche IList<T>.

2

IList è un'interfaccia, non una classe. Se si desidera inizializzarlo, è necessario inizializzarlo in una classe che implementa IList, a seconda delle esigenze specifiche interne. Di solito, IList è inizializzato con una lista.

IList<ListItem> items = new List<ListItem>(); 
6

IList non è una classe; è un'interfaccia che le classi possono implementare. L'interfaccia stessa è solo un contratto tra il consumatore della classe e la classe stessa. Questa riga di codice funzionerà:

IList<ListItem> allFaqs = new List<ListItem>(); 

Questo aiuto?

Problemi correlati