Visual Studio 空引用异常停止try块内的代码执行

ppcbkaq5  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(136)

我有一段代码,我期待一个方法在循环中被重复调用,在某个点返回null--null被返回是因为这个方法试图读取的表单元格是空的。这部分很清楚,这不是行为的问题部分。下面是这部分代码:

while (!String.IsNullOrEmpty(columnI_value))
{
    typeOfShareLineCounter++;

    try
    {
        columnI_value = sheet.GetRow(3 + typeOfShareLineCounter + typeOfShareStartIndexNewFile).GetCell(8).ToString();
    }
    catch
    {
    }
}

我不明白的是,为什么在这种情况下,当到达一个空单元格时程序会停止执行?我得到了NullReferenceException,但我希望程序继续执行,因为发生此异常的代码行位于"try"块中,正如您在上面看到的那样。这是因为Visual Studio的某些设置吗?作为一个附带说明,在"正常"场景中,我可能已经检查了GetCell方法返回的内容,如果它为null,就跳出循环(因为在本例中null意味着我们已经到达需要读取的文件段的末尾)。
然而,如果GetCell试图读取的单元格是空的,它会产生一个异常。这就是我使用try-catch的原因。但是我没有想到在这种情况下程序会停止执行。目前,我没有看到一种方法来处理这个异常而不破坏程序。顺便说一句,这个有问题的方法(GetCell)是NPOI库的一部分,用于处理excel文件。
非常感谢你的帮助。

eyh26e7m

eyh26e7m1#

为什么在访问之前不检查一下是否为null呢?我认为GetCell抛出异常是因为GetRow返回null。也不清楚columnI_value中的初始值是什么。
我会使用类似这样的代码(只是猜测这段代码预期做什么):

typeOfShareLineCounter = 0;

while (true)
{
    var cell = sheet.GetRow(3 + typeOfShareLineCounter + typeOfShareStartIndexNewFile)?.GetCell(8);
    if (cell == null)
        continue;

    columnI_value = cell.ToString();

    if (String.IsNullOrEmpty(columnI_value))
        break;

    typeOfShareLineCounter++;
}

相关问题