Инициализировать 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>
.