当执行foreach搜索空值时,它会抛出异常而不是执行为空对象指定的代码。检查对象是否为空引发异常?
foreach (Requirement requirement in DBRequirements)
{
if (this.Repository.GetElementByGuid(requirement.Guid) == null)
{
hasChanges = true;
requirement.IsDeleted = true;
}
}
Repository.GetElementByGuid()
是Enterprise Architect的一项功能。我不能修改这个,因此我不得不假设什么时候没有发现它立即抛出异常而不是返回null
? (一直没有找到答案,文档对此很少见。)我正考虑使用try catch
作为if else
,但我想知道是否有人有更好的建议。
基本上应该发生什么;它会检查数据库中的每个需求是否仍然存在。如果没有,DB应该将当前的需求标记为IsDeleted
,如果它没有做任何事情需要完成的话。它是更新数据库的同步周期的一部分。 Guid是Enterprise Architect中的唯一标识符。
编辑:忘了其实也谈不上异常..它引发异常的if语句为:
的NullReferenceException
...上GetElementByGuid(requirement.Guid)
,说明没有这样的元素存在于当前上下文中。
澄清;
DBRequirements从数据库中直接拉出来,并检查是否为空,requirements.Guid不能为null,因为它是数据库中的主键(因此不是NULL),数据库记录可能根本不存在没有它。这个.Repository在构造函数中声明(在运行时用调试器检查,它也不是null
)。
这就是为什么我无法找出抛出异常的原因。东西返回到null
,但没有任何内容在这个foreach中实际上有一个null
值。
什么是例外,它是空引用异常? – mybirthname
也许'this.Repository == null'? – MickyD
或“要求”可能为空。我们需要例外和一些上下文 –