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# 列表和数组都是可枚举的,并且可以从可枚举对象构造列表以创建集合的副本。
上面示例的最后一行有什么问题?
编译错误:“List.List(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# 列表和数组都是可枚举的,并且可以从可枚举对象构造列表以创建集合的副本。
上面示例的最后一行有什么问题?
编译错误:“List.List(IEnumerable)”的最佳重载方法匹配有一些无效参数。
如果t2
应该是二维数组的数组(列表分配建议如此),那么声明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!
上面示例的最后一行有什么问题?
该行引发错误,因为 t2 是new byte?[4, 4]
二维数组的数组,而 r2 是List of byte?[,]
二维数组
var r2 = new List<byte?[,]>(t2); // error
所以解决方案会像这样传递list of byte?[,]
一个
var r2 = new List<byte?[,]>(new List<byte?[,]>());
t 也是列表中匹配的二维数组,可以在 r2 中传递
var r2 = new List<byte?[,]>(t);