C#如何获取二维校正数组中的子数组?

C#如何获取二维校正数组中的子数组?,c#,arrays,C#,Arrays,我习惯于在其他语言中使用数组,但我对C#不太熟悉,我想知道如何获得2D数组的子数组 以下是我尝试过的: int[,]arr=newint[4,4]; int[]childArr=arr[0]; 我的错误是“[]内的索引数错误1”,预期为2”。“问题是,我想要的是子数组,而不是子数组内的某些东西,我认为错误告诉我如何处理第二个索引 感谢您的帮助。2D数组不包括访问行或列的方法。你必须迭代。您可以使用获取类似于的API 例如: public static IEnumerable<T>

我习惯于在其他语言中使用数组,但我对C#不太熟悉,我想知道如何获得2D数组的子数组

以下是我尝试过的:

int[,]arr=newint[4,4];
int[]childArr=arr[0];
我的错误是“[]内的索引数错误
1”,预期为
2”。“问题是,我想要的是子数组,而不是子数组内的某些东西,我认为错误告诉我如何处理第二个索引


感谢您的帮助。

2D数组不包括访问行或列的方法。你必须迭代。您可以使用获取类似于的API

例如:

public static IEnumerable<T> Row<T>(this T[,] arr, int row)
{
    for (var i = 0; i < arr.GetLength(0); i++)
    {
        yield return arr[i, row];
    }
}

public static IEnumerable<T> Column<T>(this T[,] arr, int col)
{
    for (var i = 0; i < arr.GetLength(1); i++)
    {
        yield return arr[col, i];
    }
}

int[,] myArray;

...

int[] row0 = myArray.Row(0).ToArray();
int[] col0 = myArray.Column(0).ToArray();
公共静态IEnumerable行(此T[,]arr,int行)
{
对于(变量i=0;i
您能定义“子数组”的含义吗?您是否正在寻找可以将2D数组实现为(
int[][]arr=new int[4][];
)的东西。然后,您可以按您想要的方式访问它:
int[]childArr=arr[0]
。但要小心,因为这种结构不会强制所有“子”数组具有相同的长度(这就是术语“锯齿”的来源)。NET针对一维阵列进行了优化,因此,根据您的使用情况,锯齿阵列的处理速度可能比二维阵列快。但二维数组更易于读取、初始化和管理。