[英]Initialize IList<T> C#
有没有一种特殊的方法来初始化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引用异常吗?
或者我应该只使用List<ListItem>
?
谢谢!
该错误是因为您正在尝试创建接口的实例。
将您的代码更改为:
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);
等等,一切都会奏效。
你的问题是IList是一个接口,而不是一个类。 您无法初始化界面。
您可以拥有一个接口实例,但需要使用实现该接口的类对其进行初始化,例如:
IList<string> strings = new List<string>();
前面的代码行将起作用,但您只能使用IList的成员而不是初始化的任何类的完整集。
伊利诺伊州不是一个阶级; 它是类可以实现的接口。 接口本身只是类的使用者和类本身之间的契约。 这行代码将起作用:
IList<ListItem> allFaqs = new List<ListItem>();
这有帮助吗?
你需要这样做:
IList<ListItem> allFaqs = new List<ListItem>();
在您的代码中,您尝试初始化接口。
IList是一个接口,因此您无法实例化它。 各种类都实现了IList。 实现IList的一个这样的类是List。 您可以像这样实例化它:
List<ListItem> allFaqs = new List<ListItem>();
您无法实例化接口(IList是一个接口)。
你需要实例化一个实现IList的东西,
像这样:
IList<ListItem> allFaqs = new List<ListItem>();
还有其他类型的IList,但List是一个很好的开始。
IList是一个接口,而不是一个类。 如果要初始化它,则需要将其初始化为实现IList的类,具体取决于内部的特定需求。 通常,IList使用List进行初始化。
IList<ListItem> items = new List<ListItem>();
IList<T>
是一个接口。 您需要实例化一个实现该接口的类:
IList<ListItem> allFaqs = new List<ListItem>();
List<T>
实现IList<T>
,因此可以分配给变量。 还有其他类型也实现IList<T>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.