Null 引用异常停止 try 块内的代码执行

Null reference exception stops the code execution inside of try block

提问人:vinn23 提问时间:1/24/2023 最后编辑:Rufus Lvinn23 更新时间:1/25/2023 访问量:166

问:

所以我有一个代码段,我期望从循环内部重复调用的方法在某一点返回 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) 是用于处理 excel 文件的 NPOI 库的一部分。

非常感谢您的帮助。

C# 可视化工作室 try-catch nullreferenceexception npoi

评论

0赞 Steve 1/24/2023
转到“调试 => Windows =>异常设置” 条目“公共语言运行时异常”的值是多少?
0赞 firatt_ 1/24/2023
好的,它在 try catch 块中,但您的 while 条件说当 columnI_value != null 继续。您需要更改条件或替换 while & try catch 块的作用域。
0赞 Rufus L 1/25/2023
请提供一个重现该问题的简化示例。我尝试了:并在您的代码中替换:(这应该重现您得到的错误),并且程序执行从未停止。string nullString = null;columnI_value = nullString.ToString();

答:

0赞 Mike Mozhaev 1/25/2023 #1

为什么不在尝试访问之前检查某些内容是否为 null? 我认为抛出异常,因为返回. 也不清楚 中 的初始值是什么。GetCellGetRownullcolumnI_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++;
}