Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在数组中获取null而不是超出范围的异常?_C# - Fatal编程技术网

C# 是否可以在数组中获取null而不是超出范围的异常?

C# 是否可以在数组中获取null而不是超出范围的异常?,c#,C#,如果某个索引值超出范围,要快速返回空值?如果使用标准数组(如示例中所示),则无法执行此操作,因为它们始终为0索引,并且始终会引发越界访问 您可以为越界情况创建自己的包装器,该包装器返回null,通过自动提供以下内容,可能会使某些算法变得更容易: class SafeOutOfBoundsArray { 公共安全边界阵列(布尔?[,]阵列) { this.array=数组; } 布尔?[,]数组; 公共布尔?这个[int r,int c] { 得到{ if(数组==null)|| r=array.

如果某个索引值超出范围,要快速返回空值?

如果使用标准数组(如示例中所示),则无法执行此操作,因为它们始终为0索引,并且始终会引发越界访问

您可以为越界情况创建自己的包装器,该包装器返回
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];}
    }
}