根据MSDN:
?? operator被称为null-coalescing运算符并且习惯于 为可空值类型或引用类型定义默认值。
但是当我运行下面的代码时:
Guid test;
Guid otherGuid = test ?? Guid.NewGuid();
我收到错误:
运营商'??'不能应用于'System.Guid'类型的操作数 '的System.Guid'
我认为Guid是一种参考类型。那不是这样吗?有人可以向我解释为什么这不起作用吗?
答案 0 :(得分:7)
Guid
不是引用类型,它是值类型,您不能将其指定为null,这就是您无法使用??
<检查它的原因/ p>
以下行会给您错误。
无法将null转换为'System.Guid',因为它是不可为空的 值类型
Guid test = null;
您可以使用Nullable
Nullable<Guid> test = null;
Guid otherGuid = test ?? Guid.NewGuid();
或简短形式
Guid? test = null;
Guid otherGuid = test ?? Guid.NewGuid();
答案 1 :(得分:7)
Guid
是一个结构而不是一个类,因此不能为空。
要实现这一点,你可以这样做:
Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
答案 2 :(得分:3)
GUID是一种结构。 http://msdn.microsoft.com/en-us/library/system.guid.aspx
尝试使用Guid.Empty
进行检查。
Guid otherGuid = test == Guid.Empty ? Guid.NewGuid() : test;
答案 3 :(得分:0)