检查object是否为空将抛出异常
本文关键字:抛出异常 object 是否 检查 | 更新日期: 2023-09-27 18:12:44
当执行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中的唯一标识符。
Edit:忘记提到异常了。它在if语句中抛出异常:
得到NullReferenceException
…在GetElementByGuid(requirement.Guid)
上,声明当前上下文中不存在这样的元素。
澄清;
dbrerequirements直接从数据库中提取,如果不为空,则检查需求。Guid不能为空,因为它是数据库中的主键(因此NOT null),没有Guid,数据库记录可能根本不存在。这一点。库是在构造函数中声明的(运行时用调试器检查,也不是null
)。
这就是为什么我无法找出抛出异常的原因。返回值为null
,但是foreach中没有任何null
值
如果您只使用DBRequirements
而Guids
foreach (Requirement requirement in DBRequirements.Where(r => r?.Guid != null))
{
if (this.Repository.GetElementByGuid(requirement.Guid) == null)
{
hasChanges = true;
requirement.IsDeleted = true;
}
}
试试下面的代码…
foreach (Requirement requirement in DBRequirements)
{
if (requirement != null)
{
if (this.Repository.GetElementByGuid(requirement.Guid) == null)
{
hasChanges = true;
requirement.IsDeleted = true;
}
}
}