<分区>
当执行 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
但我'我想知道是否有人有更好的建议。
基本上应该发生什么;如果它的 Enterprise Architect-counterpart 仍然存在,它会检查数据库中的每个需求。如果没有,DB 应该将当前需求标记为 IsDeleted
,如果它没有做任何事情都不需要做。它是更新数据库的同步周期的一部分。
Guid 是 Enterprise Architect 中的唯一标识符。
编辑: 忘了实际提及异常。它在 if 语句上抛出异常:
NullReferenceException
...在 GetElementByGuid(requirement.Guid)
上,声明当前上下文中不存在此类元素。
为了澄清;
DBRequirements 直接从数据库中提取并检查是否为空,requirement.Guid 不能为空,因为它是数据库中的主键(因此 NOT NULL),如果没有,数据库记录可能根本不存在它。 This.Repository 在构造函数中声明(在运行时使用调试器检查,它也不是 null
)。
这就是为什么我无法找出抛出异常的原因。有些东西返回为 null
,但此 foreach 中没有任何内容实际上确实具有 null
值。