检查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

检查object是否为空将抛出异常

如果您只使用DBRequirementsGuids

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;
        }
    }
}