Initialize IList<T> C#
有没有特殊的方法来初始化IList?这似乎不起作用:
1 2
| IList <ListItem > allFaqs = new IList <ListItem >();
// Error I get here: Cannot create an instance of the interface 'IList<ListItem>' |
Resharper建议像这样初始化它:
1
| IList<ListItem> allFaqs = null; |
但在我将项目添加到此列表时,这不会导致空引用异常吗?
还是应该只使用List?
谢谢!
错误是因为您试图创建接口的实例。
将代码更改为:
1
| List <ListItem > allFaqs = new List <ListItem >(); |
或
1
| IList <ListItem > allFaqs = new List <ListItem >(); |
它应该编译。
很明显,您还必须更改代码的其余部分才能适应。
您可以创建任何实现IList的具体类型,因此
1 2 3
| IList <ListItem > test = new ListItem [5];
IList <ListItem > test = new ObservableCollection <ListItem >(allFaqs ); |
等等,一切都会好起来的。
- 节省了我很多时间,谢谢:)
- 如果我想使用ilist作为数组和列表的最通用类型,该怎么办?
- @Eduardopignatelli您可以使用任何实现IList的工具。我添加了几个例子。
您的问题是,IList是一个接口,而不是类。无法初始化接口。
您可以有一个接口实例,但需要用实现该接口的类初始化它,例如:
1
| IList <string> strings = new List <string>(); |
前面的代码行可以工作,但您只能使用ilist的成员,而不能使用初始化的任何类的完整集。
- 好吧,如果你作弊就可以了;-p stackoverflow.com/questions/194484 1281522
- +1个骗子!谢谢贾景晖
IList不是类;它是类可以实现的接口。接口本身只是类的使用者和类本身之间的契约。这一行代码可以工作:
1
| IList <ListItem > allFaqs = new List <ListItem >(); |
这有帮助吗?
IList是接口,而不是类。如果要初始化它,则需要将其初始化为实现IList的类,具体取决于内部的特定需求。通常,IList是用列表初始化的。
1
| IList <ListItem > items = new List <ListItem >(); |
无法实例化接口(ilist是接口)。
您需要实例化实现IList的东西,
像这样:
1
| IList <ListItem > allFaqs = new List <ListItem >(); |
还有其他类型的ilist,但是list是一个很好的开头。
IList是一个接口,因此无法实例化它。各种类实现IList。实现IList的一个类是List。您可以这样实例化它:
1
| List <ListItem > allFaqs = new List <ListItem >(); |
你需要这样做:
1
| IList <ListItem > allFaqs = new List <ListItem >(); |
在代码中,您试图初始化接口。
IList是一个接口。需要实例化实现接口的类:
1
| IList <ListItem > allFaqs = new List <ListItem >(); |
List实现IList,因此可以分配给变量。还有其他类型也可以实现IList。