C# 为什么可以';我不能像这样使用空合并运算符吗?

C# 为什么可以';我不能像这样使用空合并运算符吗?,c#,.net,guid,C#,.net,Guid,根据: 这个??运算符称为空合并运算符,用于 为可为空的值类型或引用类型定义默认值 但当我运行下面的代码时: Guid test; Guid otherGuid = test ?? Guid.NewGuid(); 我得到一个错误: 运算符“??”不能应用于“System.Guid”类型的操作数,并且 “System.Guid” 我以为Guid是引用类型。不是这样吗?有人能向我解释一下为什么这不起作用吗?不是一个引用类型,它是一个值类型,您不能将其赋值为null,这就是为什么您不能用检查它? 下

根据:

这个??运算符称为空合并运算符,用于 为可为空的值类型或引用类型定义默认值

但当我运行下面的代码时:

Guid test;
Guid otherGuid = test ?? Guid.NewGuid();
我得到一个错误:

运算符“??”不能应用于“System.Guid”类型的操作数,并且 “System.Guid”

我以为Guid是引用类型。不是这样吗?有人能向我解释一下为什么这不起作用吗?

不是一个引用类型,它是一个值类型,您不能将其赋值为null,这就是为什么您不能用
检查它?

下面的一行将给出错误

无法将null转换为“System.Guid”,因为它是不可为null的 值类型

你可以用

是结构而不是类,因此不能为null

要使其发挥作用,您可以执行以下操作:

Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
GUID是一种结构。

尝试使用
Guid.Empty
进行检查

Guid otherGuid = test == Guid.Empty ? Guid.NewGuid() : test;
Guid? test = null;
Guid otherGuid = test ?? Guid.NewGuid();
Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
Guid otherGuid = test == Guid.Empty ? Guid.NewGuid() : test;