【发布时间】: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