代码之家  ›  专栏  ›  技术社区  ›  Colonel Panic JaredPar

如何创建IList实例?[关闭]

  •  1
  • Colonel Panic JaredPar  · 技术社区  · 5 年前

    在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不可以为空时,空怎么可能是元素?

    > 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'
    

    发生什么事?

    3 回复  |  直到 5 年前
        1
  •  8
  •   N.D.C.    5 年前

    您所拥有的是一个IList数组,它充满了空值。考虑:

    new IList<double>[3] { new List<double>() { 1, 2, 3 }, null, null }
    
        2
  •  4
  •   Jon Hanna    5 年前

    new IList<double>[3] 创建一个 new IList<double>[] ,也就是说,元素分别位于 new IList<double> .

    例如,你可以这样做:

    var arr = new IList<double>[3];
    arr[0] = new List<double>();
    
        3
  •  0
  •   Colonel Panic JaredPar    5 年前

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

    简单列表(一维):

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

    列表数组(二维):

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

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