C#-函数中的多维数组参数

C#-函数中的多维数组参数,c#,multidimensional-array,C#,Multidimensional Array,假设我有一个函数: static void foo(int[,] arr, arg1) { //say arg1 = row - 1 for(int row = 0; row < arr.GetLength(0); row++) { for(int col = 0; col < arr.GetLength(1); col++) { MessageBox.Show(arr[arg1 , col]

假设我有一个函数:

static void foo(int[,] arr, arg1)
{
    //say arg1 = row - 1

    for(int row = 0; row < arr.GetLength(0); row++)
    {  
         for(int col = 0; col < arr.GetLength(1); col++)
         {
             MessageBox.Show(arr[arg1 , col]) // should be equal to arr[row-1,col]
         }
    }
}
foo(arr, "row-1"); // should be equal to arr[row-1,col]
static void foo(int[,] arr, Func<int,int> arg1)
{
    //say arg1 = row - 1

    for(int row = 0; row < arr.GetLength(0); row++)
    {  
         for(int col = 0; col < arr.GetLength(1); col++)
         {
             int newRow = arg1(row);
             MessageBox.Show(arr[newRow, col]) // should be equal to arr[row-1,col]
         }
    }
}
静态void foo(int[,]arr,arg1)
{
//假设arg1=row-1
for(int row=0;row
我想用
arg1
引用循环变量
这可能吗?
arg1应该是什么类型?
如何编写此代码?

静态void foo(int[,]arr,int arg1){
static void foo(int[,] arr, int arg1){
for(int row = 0; row < arr.Length; row++)
{  
     for(int col = 0; col < arr[row].Length); col++)
     {
         if (row-1 >= 0 && arg1 < arr.Length && arr[arg1 , col] == arr[row-1,col])
             MessageBox.Show("found it!"); // should be equal to arr[row-1,col]
     }
}
}
对于(int row=0;row=0&&arg1
您可以将
Func
传递给函数:

static void foo(int[,] arr, arg1)
{
    //say arg1 = row - 1

    for(int row = 0; row < arr.GetLength(0); row++)
    {  
         for(int col = 0; col < arr.GetLength(1); col++)
         {
             MessageBox.Show(arr[arg1 , col]) // should be equal to arr[row-1,col]
         }
    }
}
foo(arr, "row-1"); // should be equal to arr[row-1,col]
static void foo(int[,] arr, Func<int,int> arg1)
{
    //say arg1 = row - 1

    for(int row = 0; row < arr.GetLength(0); row++)
    {  
         for(int col = 0; col < arr.GetLength(1); col++)
         {
             int newRow = arg1(row);
             MessageBox.Show(arr[newRow, col]) // should be equal to arr[row-1,col]
         }
    }
}
这种方法的问题是,第一轮迭代
的值将为
0
。通过从中减去1,您可以尝试获得超出数组边界的
arr[-1,col]
。我不确定您实际想要实现什么,因此我只能猜测您是否希望在
1
处启动
变量:

for(int row = 1; row < arr.GetLength(0); row++)