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)'的最佳重载方法匹配有一些无效的参数。
答案 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);