type multiple method interfaces generic delegate clase advantages c# generics

multiple - generic type c#



Inicializar IList<T> C# (8)

El error es porque estás intentando crear una instancia de la interfaz .

Cambie su código a:

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

o

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

y se debe compilar.

Obviamente, también tendrás que cambiar el resto de tu código para que se adapte.

Puedes crear cualquier tipo concreto que implemente IList así, así que

IList<ListItem> test = new ListItem[5]; IList<ListItem> test = new ObservableCollection<ListItem>(allFaqs);

Y así sucesivamente, todo funcionará.

¿Hay alguna forma particular de inicializar un IList<T> ? Parece que esto no funciona:

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

ReSharper sugiere inicializarlo así:

IList<ListItem> allFaqs = null;

¿Pero eso no causará una excepción de referencia nula cuando vaya a agregar elementos a esta lista?

¿O debería simplemente usar List<ListItem> ?

¡Gracias!


IList es una interfaz, así que no puedes crear una instancia. Todo tipo de clases implementan IList. Una de esas clases que implementa IList es List. Puedes instanciarlo así:

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


IList es una interfaz, no una clase. Si desea inicializarlo, debe inicializarlo en una clase que implemente IList, dependiendo de sus necesidades específicas internamente. Por lo general, IList se inicializa con una lista.

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


IList no es una clase; Es una interfaz que las clases pueden implementar. La interfaz en sí es solo un contrato entre el consumidor de la clase y la clase en sí. Esta línea de código funcionará:

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

¿Esto ayuda?


Necesitas hacer:

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

En tu código estás intentando inicializar una interfaz.


No puede crear una instancia de una interfaz (IList es una interfaz).

Necesitarías crear una instancia de algo que implemente un IList,

al igual que:

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

Hay otros tipos de ILists, pero List es una buena para empezar.


Su problema es que IList es una interfaz, no una clase. No se puede inicializar una interfaz.

Puede tener una instancia de una interfaz, pero necesita inicializarla con una clase que implemente esa interfaz como:

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

La línea de código anterior funcionará, pero solo tendrá a su disposición los miembros de IList en lugar del conjunto completo de la clase que inicialice.


IList<T> es una interfaz. Necesita crear una instancia de una clase que implemente la interfaz:

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

List<T> implementa IList<T> , por lo que puede asignarse a la variable. También hay otros tipos que también implementan IList<T> .