Инициализировать IList <T> С#

Есть ли способ инициализировать IList<T>? Это не работает:

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

ReSharper предлагает инициализировать его так:

IList<ListItem> allFaqs = null;

Но не будет ли причиной Null Reference Exception, когда я иду добавлять элементы в этот список?

Или просто использовать List<ListItem>?

Спасибо!

Ответы

Ответ 1

Ошибка в том, что вы пытаетесь создать экземпляр интерфейса.

Измените свой код на:

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

или же

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

и это должно скомпилироваться.

Вам, очевидно, придется изменить оставшуюся часть кода, чтобы она тоже подходила.

Вы можете создать любой конкретный тип, который реализует IList как это, так

IList<ListItem> test = new ListItem[5];

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

и так далее все будет работать.

Ответ 2

Ваша проблема в том, что IList - это интерфейс, а не класс. Вы не можете инициализировать интерфейс.

У вас может быть экземпляр интерфейса, но вам нужно инициализировать его классом, который реализует этот интерфейс, например:

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

Предыдущая строка кода будет работать, но вы будете иметь только члены IList, а не полный набор из любого класса, который вы инициализируете.

Ответ 3

IList не является классом; это интерфейс, который классы могут реализовать. Сам интерфейс - это просто контракт между потребителем класса и самим классом. Эта строка кода будет работать:

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

Помогает ли это?

Ответ 4

Вам нужно сделать:

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

В коде вы пытаетесь инициализировать интерфейс.

Ответ 5

IList - это интерфейс, поэтому вы не можете его создать. Все виды классов реализуют IList. Одним из таких классов, который реализует IList, является List. Вы можете создать его так:

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

Ответ 6

Вы не можете создать экземпляр интерфейса (IList - это интерфейс).

Вам нужно будет создать экземпляр того, что реализует IList,

так:

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

Существуют и другие типы ILists, но List - хороший, чтобы начать с.

Ответ 7

IList - это интерфейс, а не класс. Если вы хотите инициализировать его, вам необходимо инициализировать его классу, который реализует IList, в зависимости от ваших конкретных потребностей внутри. Обычно IList инициализируется списком.

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

Ответ 8

IList<T> - это интерфейс. Вам необходимо создать экземпляр класса, реализующего интерфейс:

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

List<T> реализует IList<T> и поэтому может быть присвоен переменной. Существуют и другие типы, которые также реализуют IList<T>.