在C#中实例化IEnumerable数组

Gab*_*ter 3 c#

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

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

但不能这样做:

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

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

Joa*_*oog 12

您是正确的,因为您无法在C#中创建接口实例.这两种说法之间的区别是,在第一条语句要创建一个数组IEnumerable<int>,这是允许的.

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

这样做的一个例子是:IEnumerable<int> numbers = new List<int> {1,2,3};;

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


Yac*_*sad 6

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

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

num[0] = new List<int>() {1,2,3};
Run Code Online (Sandbox Code Playgroud)

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

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

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

IEnumerable<int> nums = new List<int>() {1,2,3};
Run Code Online (Sandbox Code Playgroud)