C#Guid可以为空吗?

C#Guid可以为空吗?,c#,guid,C#,Guid,我知道有一种东西叫做Guid?和Nullable。我有这段代码,它编译: public Contact GetContact(Guid contactId) { if (contactId == null) { throw new ArgumentNullException(nameof(contactId)); } return _communicationsDbContext.Set<Contact>().Find(contact

我知道有一种东西叫做
Guid?
Nullable
。我有这段代码,它编译:

public Contact GetContact(Guid contactId)
{
    if (contactId == null)
    {
        throw new ArgumentNullException(nameof(contactId));
    }

    return _communicationsDbContext.Set<Contact>().Find(contactId);
}
公共联系人GetContact(Guid contactId) { 如果(contactId==null) { 抛出新ArgumentNullException(nameof(contactId)); } 返回_communicationsDbContext.Set().Find(contactId); }
“contactId==null”是否为真?

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

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

尽管如此,这是没有必要的

见:

public void M(Guid)
{
如果(guid==null)抛出新的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是一个结构,不能为null,因为它不是引用类型。我相信对于实现自定义相等运算符(例如int、Guid等)的已知
struct
类型,编译器将用false替换空比较。(因此,整个比较和抛出语句将消失)

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

尽管如此,这是没有必要的

见:

public void M(Guid)
{
如果(guid==null)抛出新的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
,structs永远不能为
null

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


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

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


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

if (contactId == Guid.Empty)


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

if (contactId == Guid.Empty)


不,它不能。事实上,当你编译时,你会收到一条警告,告诉你怎么回事,
Guid?
Nullable
当你试图设置
contactId=null时发生了什么?我试过Gnbrkm41说的话。编译器只是删除了那行代码。我在问Guid是否可以为空?(我不是问如何使它可以为空)。我问这个问题的原因是因为编译器没有抱怨代码。不,它不能。事实上,当你编译时,你会收到一条警告,告诉你怎么回事,
Guid?
Nullable
当你试图设置
contactId=null时发生了什么?我试过Gnbrkm41说的话。编译器只是删除了那行代码。我在问Guid是否可以为空?(我不是问如何使它可以为空)。我问这个问题的原因是因为编译器没有抱怨代码。