为什么我不能像这样使用null-coalescing运算符?

Abe*_*ler 2 .net c# guid

根据MSDN:

?? ?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值.

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

Guid test;
Guid otherGuid = test ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)

我收到错误:

接线员'??' 不能应用于'System.Guid'和'System.Guid'类型的操作数

我以为Guid是一个参考类型.那不是这样吗?有人可以向我解释为什么这不起作用?

Hab*_*bib 7

Guid不是引用类型,它是一个值类型,你不能将它赋值为null,这就是你无法检查它的原因??

以下行会给你错误.

无法将null转换为'System.Guid',因为它是一个不可为空的值类型

Guid test = null;
Run Code Online (Sandbox Code Playgroud)

你可以使用Nullable

Nullable<Guid> test = null;
Guid otherGuid = test ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)

或简短形式

Guid? test = null;
Guid otherGuid = test ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)


Jul*_*ian 7

Guid 是一个结构而不是一个类,因此不能为null.

为此,您可以执行以下操作:

Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)