我正在尝试编写一个方法来检查给定的 x/y 对是否是第二个数组的有效索引(例如检查是否myArray[x,y]
安全)。
我希望它能够处理任何类型的数组,我认为这应该是可能的,因为它们都具有相同的 GetUpperBounds(int d) 方法,并且我不需要触摸它们的内容。我努力了
bool validate(<T>[,] array, int x, int y){ ... }
Run Code Online (Sandbox Code Playgroud)
和
bool validate([,] array, int x, int y){ ... }
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
即使方法体是相同的字符,我是否应该根据需要继续重载此方法?
正确的语法是:
bool validate<T>(T[,] array, int x, int y)
{
}
Run Code Online (Sandbox Code Playgroud)
里面的代码应该是:
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);
}
Run Code Online (Sandbox Code Playgroud)
或者忽略下限为 != 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);
}
Run Code Online (Sandbox Code Playgroud)