从中构造C#列表什么是可枚举的 var t=newlist(); var t2=新字节?[4,4][]; var r=新列表(t); var r2=新列表(t2);//错误

从中构造C#列表什么是可枚举的 var t=newlist(); var t2=新字节?[4,4][]; var r=新列表(t); var r2=新列表(t2);//错误,c#,arrays,list,collections,ienumerable,C#,Arrays,List,Collections,Ienumerable,我认为C#列表和数组都是可枚举的,可以从可枚举对象构造列表来创建集合的副本 上面例子的最后一行有什么问题 编译错误:“List.List(IEnumerable)”的最佳重载方法匹配具有一些无效参数 上面例子的最后一行有什么问题 该行抛出错误,因为t2是新字节?[4,4]二维数组的数组,而r2是字节?[,]的列表二维数组 var t = new List<byte?[,]>(); var t2 = new byte?[4, 4][]; var r = new List<byt

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

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

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

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

该行抛出错误,因为t2是
新字节?[4,4]
二维数组的数组,而r2是
字节?[,]的列表
二维数组

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

var r = new List<byte?[,]>(t);
var r2 = new List<byte?[,]>(t2); // error
另外,t是列表中可以在r2中传递的匹配2d数组

var r2 = new List<byte?[,]>(new List<byte?[,]>());
var r2=新列表(t);

如果
t2
应该是一个二维数组数组(列表赋值建议是这样),那么
t2
的声明是错误的。如果你认为你在追求:

var r2 = new List<byte?[,]>(t);
var t=newlist();
var t2=新整数[10][,];
对于(int i=0;i
列表和数组必须具有相同类型的元素。您尝试使用字节数组中的字节初始化字节数组列表。我猜它不会编译,因为它不明确。如何在列表中放置元素?按行还是按列?这是一个毫无意义的答案@lukas。这是一个二维数组,他正试图分配给一个二维数组列表。@JonathonReinhart:不,他实际上有一个一维数组的二维数组。t是(字节?)的(2d数组)的(列表)。t2是((字节?)的((2d数组)的(数组)。@ALAN2此处是,您的右侧没有注意到结尾处的[]。我急于先把答案贴出来。谢谢,我会更正我的回答now@alan2here见问题注释。你错了
t2
是(字节的数组?)的(2d数组)。这就是为什么转换到
IEnumerable
失败的原因。啊,谢谢。它现在似乎正在编译。我可能读错了这句话。@ALAN2我不明白为什么我得到了-1,因为我给出了它的解决方案。如果你也参考了Eric Lippert在评论中发表的关于“数组数组”的博文,那可能会很好。我没有真正将它用作参考,因为这是很明显的,但供将来参考:这并不明显,这篇文章开头的想法是,大多数人都会像我一样犯错。
var r2 = new List<byte?[,]>(t);
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!