根据MSDN:
?? ?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值.
但是当我运行下面的代码时:
Guid test;
Guid otherGuid = test ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
接线员'??' 不能应用于'System.Guid'和'System.Guid'类型的操作数
我以为Guid是一个参考类型.那不是这样吗?有人可以向我解释为什么这不起作用?
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)
Guid 是一个结构而不是一个类,因此不能为null.
为此,您可以执行以下操作:
Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)