在C#中实例化IEnumerable数组

时间:2016-01-27 17:42:07

标签: c#

我想知道为什么你可以在C#中做到这一点:

IEnumerable<int>[] nums = new IEnumerable<int>[10];

但不能这样做:

IEnumerable<int> nums = new IEnumerable<int>();

C#在第一个声明的基础上做了什么?我以为你无法使用new关键字创建接口实例。

2 个答案:

答案 0 :(得分:12)

您是正确的,因为您无法在C#中创建接口实例。这两个陈述之间的区别在于,在第一个语句中,您创建了bash数组,这是允许的。

如果您创建实现IEnumerable<int>接口的类的实例(例如IEnumerable<T>),则第二个语句将起作用。

这样做的一个例子是:List<T>;

你也可以这样做:IEnumerable<int> numbers = new List<int> {1,2,3};

答案 1 :(得分:6)

第一个语句是创建一个大小为10的新数组,其项类型为IEnumerable<int>。数组本身是您可以创建的具体类型。

要在此数组中设置项目,您可以执行以下操作:

num[0] = new List<int>() {1,2,3};

虽然项目类型为IEnumerable<int>,但您无法创建IEnumerable<int>的实例。您必须创建一个实现IEnumerable<int>的类的实例,如List<int>

在第二个示例中,您尝试创建一个IEnumerable<int>的实例,它是一个接口,即不是类,因此它不会编译。

变量类型仍然可以是IEnumerable<int>,但您必须创建一个实现IEnumerable<int>的类的实例,如下所示:

IEnumerable<int> nums = new List<int>() {1,2,3};