IndexOutOfRangeException - 假设为0

时间:2014-08-11 15:24:06

标签: c# arrays indexoutofrangeexception

我正在处理一个数组,我想在其中添加一些值。在某些方面,只需一次计算即可完成,它将在数组外部请求索引。

有没有办法说'如果索引在数组之外,假设值为0'?

有点像这样:

                   try
                   {

                   grid[x,y] = grid[x-1,y] + grid[x-1,y-1];
                   //This is simplified 

                   x++;

                   }

                   catch (IndexOutOfRangeException)
                   {                           
                           grid[x - 1, y - 1] = 0;
                   }

1 个答案:

答案 0 :(得分:4)

为简单起见,假设您有一个整数数组,您可以考虑extension method,如下所示:

static class ArrayExtension
{
    static int SafeGetAt(this int[,] a, int i, int j)
    {
        if(i < 0 || i >= a.GetLength(0) || j < 0 || j >= a.GetLength(1))
            return 0;
        return a[i, j];
    }
}

然后以

的形式访问数组元素
grid.SafeGetAt(x, y);

另一种方法可能是创建一个包装类,它在内部访问数组并且使用indexer。在这种情况下,您可以继续使用[,] - 语法来访问元素。


我不建议使用异常,这些异常非常慢,应该在常规应用程序工作流程中避免使用。