c# - 检查对象是否为空会抛出异常?

标签 c# enterprise-architect

<分区>

当执行 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 值。

最佳答案

在您只使用具有Guids

DBRequirements 的地方试试这个
foreach (Requirement requirement in DBRequirements.Where(r => r?.Guid != null))
{
    if (this.Repository.GetElementByGuid(requirement.Guid) == null)
    {
        hasChanges = true;
        requirement.IsDeleted = true;
    }
}

关于c# - 检查对象是否为空会抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992267/

相关文章:

c# - 如何以编程方式禁用网络摄像头二极管

c# - 从图库中选择视频时应用程序崩溃

Enterprise Architect 的 MySQL 存储库?

sql - Sparx EA : detect what database type currently using

visual-studio - Enterprise Architect (EA) 和 Microsoft Test Manager (MTM) 之间的集成

c++ - 使用自定义宏扩展 C++ 的企业架构师语法

c# linq 更新数据库中的所有记录

c# - 设计问题 - 用 C# 更新多行 - 关注多次往返性能

c# - 使用现有数据库中的数据在 ASP.NET MVC 中创建数据库模拟

uml - 不确定我的 UML 用例图是否正确