2009-08-28 66 views
16

是否有特殊的方法来初始化IList<T>?这似乎并不工作:初始化IList <T> C#

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

ReSharper的建议将其初始化像这样:

IList<ListItem> allFaqs = null; 

,但不会导致一个空引用异常时,我去项目添加到这个列表?

或者我应该只使用List<ListItem>

谢谢!

回答

40

错误是因为您正尝试创建接口的实例。

你的代码更改为:

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

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

,它应该编译。

你显然必须改变你的代码的其余部分以适应。

+0

为我节省了很多时间,谢谢:) – Sijav 2015-03-26 02:22:12

2

你需要做的:

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

在你的代码试图初始化的接口。

2

IList是一个接口,所以你不能实例化它。各种类实现IList。一个实现IList的类是List。你可以这样实例化:

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

你的问题是IList是一个接口,而不是一个类。您无法初始化界面。

你可以有一个接口的实例,但你需要实现该接口,如类初始化:

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

的代码前述行会的工作,但你只会有IList的成员可以从你初始化的任何类中获得,而不是全套。

+1

那么,你可以,如果你作弊; - p http://stackoverflow.com/questions/194484#1281522 – 2009-08-28 21:12:14

+0

+1的作弊!谢谢Marc – Anders 2009-08-28 21:43:53

2

你不能实例化一个接口(IList是一个接口)。

您将需要一些实例实现一个IList,

像这样:

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

还有其他类型ILists的,但名单是一个好的开始。

1

IList<T>是一个接口。您需要实例化一个实现接口的类:

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

List<T>实现IList<T>,因此可分配给变量。还有其他类型也执行IList<T>

2

IList是一个接口,而不是一个类。如果你想初始化它,你需要将它初始化为一个实现IList的类,具体取决于你的内部特定需求。通常,IList是用List来初始化的。

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

IList不是一类;它是一个类可以实现的接口。接口本身只是类的消费者和类本身之间的契约。这行代码将工作:

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

这是否有帮助?