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是否可以为空?(我不是问如何使它可以为空)。我问这个问题的原因是因为编译器没有抱怨代码。