根据可枚举的内容构造C#列表

时间:2012-07-27 16:23:54

标签: c# arrays list collections ienumerable

var t = new List<byte?[,]>();
var t2 = new byte?[4, 4][];

var r = new List<byte?[,]>(t);
var r2 = new List<byte?[,]>(t2); // error

我认为C#列表和数组都是Enumerable,并且可以从可枚举对象构造列表以创建集合的副本。

上面例子的最后一行怎么了?

编译错误:'List.List(IEnumerable)'的最佳重载方法匹配有一些无效的参数。

2 个答案:

答案 0 :(得分:3)

如果t2应该是2D数组的数组(列表赋值建议如此),那么t2的声明是错误的。如果你认为你在追求:

var t = new List<int[,]>();
var t2 = new int[10][,];
for (int i = 0; i < t2.Length; ++i)
{
    t2[i] = new int[4, 4];
}

var r = new List<int[,]>(t);
var r2 = new List<int[,]>(t2); // no error!

答案 1 :(得分:0)

  

上面例子的最后一行怎么了?

该行抛出错误,因为t2是new byte?[4, 4]一个2d数组的数组,以及r2是List of byte?[,] 2d数组

var r2 = new List<byte?[,]>(t2); // error

所以解决方案就是像这样传递list of byte?[,]

var r2 = new List<byte?[,]>(new List<byte?[,]>());

t也是列表中匹配的2d数组,可以在r2

中传递
var r2 = new List<byte?[,]>(t);