C# 指导是否可以为空

  • 本文关键字:是否 c# guid
  • 更新时间 :
  • 英文 :


我知道有Guid?Nullable<Guid>这样的东西。我有这段代码,它可以编译:

public Contact GetContact(Guid contactId)
{
    if (contactId == null)
    {
        throw new ArgumentNullException(nameof(contactId));
    }
    return _communicationsDbContext.Set<Contact>().Find(contactId);
}

"contactId == null"可以是真的吗?

System.Guid 是一个结构体,它不能为 null,因为它不是引用类型。我相信对于实现自定义相等运算符(例如 int、Guid 等)的已知struct类型,编译器会将空比较替换为 false。(因此,整个比较和抛出语句将消失)

对于未实现自定义相等运算符的struct类型,代码根本无法编译。

尽管如此,这是不必要的。

请参阅: https://sharplab.io/#v2:EYLgtghgzgLgpgJwDQxASwDYB8ACAGAAhwEYBuAWACgcBmIgJgIGECBvKgzounAFgICyACgDiAVzQATAgHMJkgJRsOXVWgBmBIXKkEAvHoIA7MRgxKYACwQB7AO7G4DgIII5YOEZgA5UxgCiAB4AxnAADjBoNkZCChSUqgC+VIlAA===

public void M(Guid guid)
{
    if (guid == null) throw new ArgumentNullException();
}

将被编译为:

// Methods
    .method public hidebysig 
        instance void M (
            valuetype [mscorlib]System.Guid guid
        ) cil managed 
    {
        // Method begins at RVA 0x2050
        // Code size 1 (0x1)
        .maxstack 8
        IL_0000: ret
    } // end of method C::M

如您所见,该方法中的第一条指令是 return。

System.Guid是一个struct,结构永远不能null

相反,您可能希望检查它是否不是"零"Guid:

x != Guid.Empty

Guid 是一种值类型,因此它不能为 null。一种检查方法是:

if (contactId == Guid.Empty)

 contactId == default(Guid)

相关内容

  • 没有找到相关文章

最新更新