2015-05-16 4 views
2

Я пытаюсь написать метод, который проверяет, является ли заданная пара x/y допустимым индексом для второго массива (например, проверьте, является ли myArray[x,y] безопасным).C#: Передача общих массивов

Я бы хотел, чтобы он работал с массивами любого типа, которые, как я считаю, должны быть возможны, потому что все они имеют один и тот же метод GetUpperBounds (int d), и мне не нужно касаться их содержимого. Я попытался

bool validate(<T>[,] array, int x, int y){ ... } 

и

bool validate([,] array, int x, int y){ ... } 

, но это не работает.

Должен ли я просто перегружать этот метод по мере необходимости, даже если тела метода будут идентичными символами?

ответ

4

Правильный синтаксис:

bool validate<T>(T[,] array, int x, int y) 
{ 
} 

с кодом внутри, что должно быть:

bool validate<T>(T[,] array, int x, int y) 
{ 
    return x >= array.GetLowerBound(0) && x <= array.GetUpperBound(0) && 
     y >= array.GetLowerBound(1) && y <= array.GetUpperBound(1); 
} 

Или игнорируя массив, есть нижняя граница = 0 ... (вы можете создать массивы которые имеют первый индекс на уровне 100, так что myarray[100] является первым элементом. Это было сделано для совместимости со старым VB, вероятно, оно очень не используется)

bool validate<T>(T[,] array, int x, int y) 
{ 
    return x >= 0 && x < array.GetLength(0) && 
     y >= 0 && y < array.GetLength(1); 
} 
+0

Вот и все! Могли бы объяснить, как работает между именем метода и открытым паром, или термином, который я могу найти? – Weavermount

+1

@Weavermount Это синтаксис дженериков в C#: вы помещаете между именем метода и открытием '(' список общих терминов, которые вы будете использовать ('', '', '' и т. Д.). компилятор иногда может вывести их так, что вам не нужно явно писать их, когда вы ** вызываете ** метод (в этом случае вы можете «проверять (новый двойной [5,5], 4, 4)»). компилятор не может, поэтому вы должны вызвать метод с явными значениями: 'validate (новый double [5,5], 4, 4)' – xanatos

Смежные вопросы