有没有特定的方法来初始化IList<T>?这似乎不起作用:
IList<ListItem> allFaqs = new IList<ListItem>();
// Error I get here: Cannot create an instance of the interface 'IList<ListItem>'
Run Code Online (Sandbox Code Playgroud)
ReSharper建议像这样初始化它:
IList<ListItem> allFaqs = null;
Run Code Online (Sandbox Code Playgroud)
但是当我去向此列表添加项目时,这不会导致Null引用异常吗?
或者我应该使用List<ListItem>?
谢谢!
Chr*_*isF 47
该错误是因为您正在尝试创建接口的实例.
将您的代码更改为:
List<ListItem> allFaqs = new List<ListItem>();
Run Code Online (Sandbox Code Playgroud)
要么
IList<ListItem> allFaqs = new List<ListItem>();
Run Code Online (Sandbox Code Playgroud)
它应该编译.
您显然必须更改其余代码以适应.
您可以创建任何具体的类型IList,如此
IList<ListItem> test = new ListItem[5];
IList<ListItem> test = new ObservableCollection<ListItem>(allFaqs);
Run Code Online (Sandbox Code Playgroud)
等等,一切都会奏效.
Jus*_*ner 17
你的问题是IList是一个接口,而不是一个类.您无法初始化界面.
您可以拥有一个接口实例,但需要使用实现该接口的类对其进行初始化,例如:
IList<string> strings = new List<string>();
Run Code Online (Sandbox Code Playgroud)
前面的代码行将起作用,但您只能使用IList的成员而不是初始化的任何类的完整集.
伊利诺伊州不是一个阶级; 它是类可以实现的接口.接口本身只是类的使用者和类本身之间的契约.这行代码将起作用:
IList<ListItem> allFaqs = new List<ListItem>();
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?