C# 如何创建IList的实例?

C# 如何创建IList的实例?,c#,.net,C#,.net,在C中,我理解不能创建接口的实例: > new IList<double>() (1,1): error CS0144: Cannot create an instance of the abstract class or interface 'IList<double>' 但今天我看到了以下代码: > new IList<double>[3] IList<double>[3] { null, null, null } 真奇怪!这怎

在C中,我理解不能创建接口的实例:

> new IList<double>()
(1,1): error CS0144: Cannot create an instance of the abstract class or interface 'IList<double>'
但今天我看到了以下代码:

> new IList<double>[3]
IList<double>[3] { null, null, null }
真奇怪!这怎么可能

特别是,当double不可为null时,null如何成为元素

> new List<double> { null }
(1,20): error CS1950: The best overloaded Add method 'List<double>.Add(double)' for the collection initializer has some invalid arguments
(1,20): error CS1503: Argument 1: cannot convert from '<null>' to 'double'

发生了什么事?

您拥有的是一个IList数组,其中充满了null。考虑:

new IList<double>[3] { new List<double>() { 1, 2, 3 }, null, null }

这里有一个IList数组,其中满是null。考虑:

new IList<double>[3] { new List<double>() { 1, 2, 3 }, null, null }
new IList[3]创建一个新的IList[],也就是说,一个数组中的元素都是新的IList

例如,你可以做:

var arr = new IList<double>[3];
arr[0] = new List<double>();
new IList[3]创建一个新的IList[],也就是说,一个数组中的元素都是新的IList

例如,你可以做:

var arr = new IList<double>[3];
arr[0] = new List<double>();

仔细观察输出,可以区分一维和二维数据结构

一个简单的一维列表:

> new List<string> { null, null, null }
List<string>(3) { null, null, null }
> new IList<string>[3]
IList<string>[3] { null, null, null }
二维列表数组:

> new List<string> { null, null, null }
List<string>(3) { null, null, null }
> new IList<string>[3]
IList<string>[3] { null, null, null }

在方括号中,3表示数组的长度。在圆括号中,3表示列表的长度。

仔细查看输出,可以区分一维和二维数据结构

一个简单的一维列表:

> new List<string> { null, null, null }
List<string>(3) { null, null, null }
> new IList<string>[3]
IList<string>[3] { null, null, null }
二维列表数组:

> new List<string> { null, null, null }
List<string>(3) { null, null, null }
> new IList<string>[3]
IList<string>[3] { null, null, null }

在方括号中,3表示数组的长度。在圆括号中,3表示列表的长度。

这类似于double[3],因为您创建的数组将包含double,数组的大小为3个元素。这里唯一的区别是包含类型,您问题中的数组是IList而不是double。这并不奇怪。第一个代码段尝试创建一个不可能的接口实例。第二个尝试创建一个用默认值(即null)填充的IList项数组。第三个尝试将null存储在一个容器中,该容器用于保存双实例投票关闭的人是不正确的。这不是一个简单的印刷错误,因为querent不理解他们偶然发现的语法的效果,并且对其效果有疑问。@JonHanna不,这不是一个不知道数组是什么的人,顺便说一句,如果数组是,它将是一个重复的数组。这是一个没有注意到他们正在创建数组而不是IList的人,即一个简单的印刷错误。显然你对OP的评价很低。这与double[3]相似,你创建了一个包含double的数组,数组的大小是3个元素。这里唯一的区别是包含类型,您问题中的数组是IList而不是double。这并不奇怪。第一个代码段尝试创建一个不可能的接口实例。第二个尝试创建一个用默认值(即null)填充的IList项数组。第三个尝试将null存储在一个容器中,该容器用于保存双实例投票关闭的人是不正确的。这不是一个简单的印刷错误,因为querent不理解他们偶然发现的语法的效果,并且对其效果有疑问。@JonHanna不,这不是一个不知道数组是什么的人,顺便说一句,如果数组是,它将是一个重复的数组。这是一个没有注意到他们正在创建数组而不是IList的人,即一个简单的印刷错误。很明显你对OP的评价很低。谢谢。我不认为IList[3]是一系列列表。谢谢。我不认为IList[3]是一组列表。