У меня есть метод (в классе), который передается 2 целыми числами и затем возвращает значение в этой «координате» в массиве с зубцами, который настроен как 2D-сетка. Так, например, GetXY(5,6)
вернет любое целочисленное значение, находящееся в этой позиции.Если логика операторов и массивы
В методе у меня есть оператор if, который проверяет, что переданные значения не находятся ниже нуля или выше, чем размер массива, и генерирует исключение с throw new
, если значения.
Код частично работает, за исключением того, что он определяет, когда строка имеет неправильное значение и ничего не делает, когда столбец имеет неправильное значение.
Вот мой код (grid
создается в конструкторе класса):
public int GetXY(int row, int column)
{
int[] items = grid[column];
if (row < 0 || column < 0 || row >= grid.Length || column >= items.Length)
{
throw new Exception("The passed coordinates are outside the range of the grid. " +
"Passed coordinates: " + row.ToString() + "," + column.ToString() + ".");
}
return grid[row][column];
}
Когда я GetXY (10.9) (на 10х10) сетки, Я получаю сообщение об исключении, за исключением случаев, Я получаю GetXY (9, 10) Получаю:
Unhandled Exception: System.IndexOutOfRangeException: Index was outside the boun
ds of the array.
at ProcGen.ProceduralGrid.GetXY(Int32 row, Int32 column) in C:\Users\Lloyd\do
cuments\visual studio 2010\Projects\ProcGen\ProcGen\ProceduralGrid.cs:line 127
at ProcGen.Program.Main(String[] args) in C:\Users\Lloyd\documents\visual stu
dio 2010\Projects\ProcGen\ProcGen\Program.cs:line 27
Почему это работает только для строк? Что случилось?
Благодаря
исключение исключений происходит, когда у вас нет такого количества записей. Помните, что индекс массива основан на 0, это может быть так же просто, как сделать -1 для ваших значений для поиска массива. –
Также вы должны бросить более конкретное исключение, например 'ArgumentOutOfRangeException' или' IndexOutOfRangeException' – vittore