C# 是否可以在数组中获取null而不是超出范围的异常?
如果某个索引值超出范围,要快速返回空值?如果使用标准数组(如示例中所示),则无法执行此操作,因为它们始终为0索引,并且始终会引发越界访问 您可以为越界情况创建自己的包装器,该包装器返回C# 是否可以在数组中获取null而不是超出范围的异常?,c#,C#,如果某个索引值超出范围,要快速返回空值?如果使用标准数组(如示例中所示),则无法执行此操作,因为它们始终为0索引,并且始终会引发越界访问 您可以为越界情况创建自己的包装器,该包装器返回null,通过自动提供以下内容,可能会使某些算法变得更容易: class SafeOutOfBoundsArray { 公共安全边界阵列(布尔?[,]阵列) { this.array=数组; } 布尔?[,]数组; 公共布尔?这个[int r,int c] { 得到{ if(数组==null)|| r=array.
null
,通过自动提供以下内容,可能会使某些算法变得更容易:
class SafeOutOfBoundsArray
{
公共安全边界阵列(布尔?[,]阵列)
{
this.array=数组;
}
布尔?[,]数组;
公共布尔?这个[int r,int c]
{
得到{
if(数组==null)||
r=array.GetUpperBound(0)| | c>=array.GetUpperBound(1))
返回null;
返回数组[r,c];}
}
}
为什么不从1
开始迭代呢?不,这是不可能的。丑陋的方法是捕获索引超出范围异常并返回null。这也是不使用?[
的情况……如果数组是null
,它在下一次迭代中仍将为null,因此您应该对null进行一次测试并跳过整个循环。
bool?[,] logicTable = new bool?[width, height];
for (int i = 0; i < width; ++i)
for (int j = 0; j < height; j++)
if (logicTable?[i, j - 1] == true)
{...}
logicTable?[i, j - 1]
class SafeOutOfBoundsArray
{
public SafeOutOfBoundsArray(bool?[,] array)
{
this.array = array;
}
bool?[,] array;
public bool? this[int r, int c]
{
get {
if (array == null ||
r <0 || c < 0 ||
r>=array.GetUpperBound(0)|| c>=array.GetUpperBound(1))
return null;
return array[r,c];}
}
}