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

4

2 回答 2

3

如果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!
于 2012-07-27T16:50:39.203 回答
0

上面示例的最后一行有什么问题?

该行引发错误,因为 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);
于 2012-07-27T16:31:41.787 回答