【问题标题】:Null reference exception stops the code execution inside of try block空引用异常停止 try 块内的代码执行
【发布时间】:2023-01-25 02:31:15
【问题描述】:

所以我有一个代码段,我期待一个从循环内部重复调用的方法在某一点返回 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 方法返回的内容,如果它为空,则跳出循环(因为在这种情况下为空意味着我们已经到达文件末尾需要读取的段)。

但是,如果 GetCell 尝试读取的单元格为空,则此处会产生异常。这就是我使用 try-catch 的原因。但我没想到程序执行会在这种情况下停止。目前,我没有看到在不破坏程序的情况下处理异常的方法。顺便说一句,这个有问题的方法 (GetCell) 是用于处理 excel 文件的 NPOI 库的一部分。

非常感谢你的帮助。

【问题讨论】:

  • 转到“调试 => Windows => 异常设置”条目“公共语言运行时异常”的值是多少?
  • 好的,它在 try catch 块中,但您的 while 条件表示 when columnI_value != null continue 。您需要更改条件或替换 while & try catch 块的范围。
  • 请提供一个可重现该问题的简化示例。我试过:string nullString = null; 并替换为您的代码:columnI_value = nullString.ToString();(应该重现您遇到的错误),并且程序执行从未停止。

标签: c# visual-studio try-catch nullreferenceexception npoi


【解决方案1】:

为什么不在尝试访问之前检查某些内容是否为空? 我认为 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++;
}

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 2014-07-15
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多