1

私はその値のいくつかを追加したい配列に取り組んでいます。いくつかの時点で、これは 1 回の計算で実行されるため、配列外のインデックスが要求されます。

「インデックスが配列の外側にある場合、値を 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;
                   }
4

1 に答える 1

4

簡単にするために整数配列があると仮定すると、次のような拡張メソッドを検討できます。

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);

別のアプローチとして、配列に内部的にアクセスし、インデクサーを補完するラッパー クラスを作成することもできます 。この場合、[,]引き続き -syntax を使用して要素にアクセスできます。


例外を使用することはお勧めしません。これは非常に遅く、通常のアプリケーション ワークフローでは避ける必要があります。

于 2014-08-11T15:27:38.907 に答える