初始化IList <t> C#</t>

时间:2009-08-28 19:54:45

标签: c# generics

是否有特定的方法来初始化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;

但是当我去向此列表添加项目时,这不会导致空引用异常吗?

或者我应该使用List<ListItem>

谢谢!

8 个答案:

答案 0 :(得分:44)

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

将您的代码更改为:

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);

依此类推,一切正常。

答案 1 :(得分:16)

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

您可以拥有一个接口实例,但需要使用实现该接口的类对其进行初始化,例如:

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

前面的代码行将起作用,但您只能使用IList的成员,而不是您初始化的任何类的完整集。

答案 2 :(得分:6)

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

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

这有帮助吗?

答案 3 :(得分:2)

你需要这样做:

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

在您的代码中,您尝试初始化界面。

答案 4 :(得分:2)

IList是一个接口,因此您无法实例化它。各种类都实现了IList。实现IList的一个这样的类是List。您可以像这样实例化它:

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

答案 5 :(得分:2)

您无法实例化接口(IList是一个接口)。

您需要实例化实现IList的内容,

像这样:

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

还有其他类型的IList,但List是一个很好的开始。

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

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

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

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