C# 对锯齿阵列使用foreach

C# 对锯齿阵列使用foreach,c#,jagged-arrays,C#,Jagged Arrays,我认为它应该创建一个 int[][] myArray = new int[10][]; foreach (int[] eachArray in myArray) { eachArray = new int[2] } 锯齿状数组太令人困惑了……这不会创建您要查找的锯齿状数组。它试图将一个新的int[2]实例分配给迭代变量,而不是原始数组中的插槽。这甚至不会编译,因为编译器将迭代变量视为只读 实现这一点的方法是使用for循环 { 0 , 0 } {0 , 0} ......... 不允许在fo

我认为它应该创建一个

int[][] myArray = new int[10][];

foreach (int[] eachArray in myArray) {
eachArray = new int[2]
}

锯齿状数组太令人困惑了……

这不会创建您要查找的锯齿状数组。它试图将一个新的int[2]实例分配给迭代变量,而不是原始数组中的插槽。这甚至不会编译,因为编译器将迭代变量视为只读

实现这一点的方法是使用for循环

{ 0 , 0 }
{0 , 0}
.........

不允许在foreach循环内分配给循环变量。您需要一个带计数器的常规for循环,或者您可以尝试一些稍微花哨的东西:

for (var i = 0; i < myArray.Length; i++) {
  myArray[i] = new int[2];
}

很抱歉造成混淆,我将添加更多细节在上一个问题中,您得到了一个带有文档的答案。在这里,您可以找到这个问题的答案。数组并不令人困惑。。请发表一个实际问题,不仅仅是你希望我们知道你在想什么或有什么问题的代码。谢谢,如果你把它看作一个数组数组的数组,那么它就没有那么令人困惑了:它的行为和任何其他数组一样,但它的项也是数组……如果锯齿数组令人困惑,请使用列表。它还有一个优点,就是它可以调整大小,而不需要额外复制到另一个数组中。谢谢,但是我应该一直使用这种方法吗?对我来说,使用for循环似乎很难看。。。有更漂亮的方法吗?@user1143720 for循环是标准的方法。这可以用一个完整的初始值设定项来完成,但这需要初始化整个内联数组。很抱歉这个愚蠢的问题。在发布下一个问题之前,我会做更多的研究。
int[][] myArray = Enumerable.Range(0, 10).Select(i => new int[2]).ToArray();