Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回某个值的最简洁方法是;IndexOutOfBounds“;在多维数组中_C#_Arrays - Fatal编程技术网

C# 返回某个值的最简洁方法是;IndexOutOfBounds“;在多维数组中

C# 返回某个值的最简洁方法是;IndexOutOfBounds“;在多维数组中,c#,arrays,C#,Arrays,比如,;给定一个2D数组int[,]arr={{1,2,3},{4,5,6},{7,8,9}&求和函数 int Sum(int[,] arr, int ix, int iy) => arr[ix - 1, iy - 1] + arr[ix - 1, iy] + arr[ix - 1, iy + 1] + arr[ix , iy - 1] + arr[ix , iy]

比如,;给定一个2D数组
int[,]arr={{1,2,3},{4,5,6},{7,8,9}&求和函数

int Sum(int[,] arr, int ix, int iy) => 
                            arr[ix - 1, iy - 1] + arr[ix - 1, iy] + arr[ix - 1, iy + 1] +
                            arr[ix    , iy - 1] + arr[ix    , iy] + arr[ix    , iy + 1] +
                            arr[ix + 1, iy - 1] + arr[ix + 1, iy] + arr[ix + 1, iy + 1];
以下代码将出错:

for(int i = 0; i < sx; ++i) 
    for(int j = 0; j < sx; ++j) 
        Console.Write("{0} ", Sum(arr, i, j));
默认值为
false
,则应产生
true
(与上述打印方法相同)

对于2D数组或C#中的一般多维数组,最简洁的实现这种函数的方法是什么?

使用将是一种简单而简洁的方法,可以实现您想要的功能-只需让数组被“默认”值(0/false)包围,并确保在“安全边界”内迭代即可

如果更改数组不是一个选项,那么编写helper方法来获取元素将使代码的长度和结构保持不变

T Get<T>(T[,] arr, int ix, int iy)
{
   return ix < 0 || ix > arr.GetUpperBound(0) ||
          iy < 0 || iy > arr.GetUpperBound(1) ? 
         default(T) : arr[ix,iy];
}
T获取(T[,]arr,int-ix,int-iy)
{
返回ix<0 | | ix>arr.GetUpperBound(0)||
iy<0 | | iy>arr.GetUpperBound(1)?
默认值(T):arr[ix,iy];
}

所以我只是用填充物包围数组?如果是这样的话,有没有一种不用手动迭代的方法?
T Get<T>(T[,] arr, int ix, int iy)
{
   return ix < 0 || ix > arr.GetUpperBound(0) ||
          iy < 0 || iy > arr.GetUpperBound(1) ? 
         default(T) : arr[ix,iy];
}