提问人:vinn23 提问时间:1/24/2023 最后编辑:Rufus Lvinn23 更新时间:1/25/2023 访问量:166
Null 引用异常停止 try 块内的代码执行
Null reference exception stops the code execution inside of try block
问:
所以我有一个代码段,我期望从循环内部重复调用的方法在某一点返回 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 库的一部分。
非常感谢您的帮助。
答:
0赞
Mike Mozhaev
1/25/2023
#1
为什么不在尝试访问之前检查某些内容是否为 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++;
}
评论
string nullString = null;
columnI_value = nullString.ToString();