2009-08-28 10 views
16

Gibt es eine besondere Möglichkeit, eine IList<T> zu initialisieren? Dies gilt nicht zu funktionieren scheint:Initialize IList <T> C#

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

ReSharper schlägt vor, es zu initialisieren, etwa so:

IList<ListItem> allFaqs = null; 

Aber wird das nicht NULL-Verweis Ausnahme verursachen, wenn ich Artikel zu dieser Liste hinzuzufügen gehen?

Oder sollte ich einfach List<ListItem> verwenden?

Danke!

Antwort

40

Der Fehler liegt daran, dass Sie versuchen, eine Instanz der Schnittstelle zu erstellen.

Ihren Code ändern:

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

oder

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

und sollte es kompilieren.

Sie müssen natürlich den Rest Ihres Codes ändern, um auch zu passen.

+0

sparte mir viel Zeit, danke :) – Sijav

2

Sie tun müssen:

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

In Ihrem Code Sie versuchen, eine Schnittstelle zu initialisieren.

2

IList ist eine Schnittstelle, daher können Sie sie nicht instanziieren. Alle Arten von Klassen implementieren IList. Eine solche Klasse, die IList implementiert, ist List. Sie können es wie folgt instanziieren:

17

Ihr Problem ist, dass IList eine Schnittstelle ist, keine Klasse. Sie können eine Schnittstelle nicht initialisieren.

Sie können eine Instanz einer Schnittstelle haben, aber Sie müssen es mit einer Klasse initialisieren, die diese Schnittstelle implementiert, wie:

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

Die vorhergehenden Codezeile funktioniert, aber Sie müssen nur die Mitglieder von IList stehen Ihnen zur Verfügung statt des vollständigen Satzes von welcher Klasse auch immer Sie initialisieren.

+1

Nun, Sie können, wenn Sie mogeln; -p http://stackoverflow.com/questions/194484#1281522 –

+0

+1 für den Betrüger! Danke Marc – Anders

2

Sie können keine Schnittstelle instantiieren (IList ist eine Schnittstelle).

Sie benötigen würden, etwas zu instanziieren, die ein IList implementiert,

wie so:

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

Es gibt auch andere Arten von ILists, aber Liste ist gut für den Anfang.

1

IList<T> ist eine Schnittstelle.Sie müssen eine Klasse instanziiert, die die Schnittstelle implementiert:

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

List<T> implementiert IList<T> und kann so der Variablen zugewiesen werden. Es gibt auch andere Typen, die auch IList<T> implementieren.

2

IList ist ein Interface, keine Klasse. Wenn Sie es initialisieren möchten, müssen Sie es in Abhängigkeit von Ihren spezifischen Anforderungen intern mit einer Klasse initialisieren, die IList implementiert. Normalerweise wird IList mit einer Liste initialisiert.

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

IList ist keine Klasse; Es ist eine Schnittstelle, die Klassen implementieren können. Die Schnittstelle selbst ist nur ein Vertrag zwischen dem Konsumenten der Klasse und der Klasse selbst. Diese Codezeile funktioniert:

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

Hilft das?

Verwandte Themen