关于泛型:初始化IList< T>

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是一个接口,而不是类。无法初始化接口。

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

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

前面的代码行可以工作,但您只能使用ilist的成员,而不能使用初始化的任何类的完整集。


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