2

根据MSDN

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

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

Guid test;
Guid otherGuid = test ?? Guid.NewGuid();

我得到错误:

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

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

4

4 回答 4

8

Guid不是引用类型,它是值类型,您不能将其分配为 null,这就是为什么您不能检查它??

以下行会给你错误。

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

Guid test = null;

你可以使用Nullable

Nullable<Guid> test = null;
Guid otherGuid = test ?? Guid.NewGuid();

或简短的形式

Guid? test = null;
Guid otherGuid = test ?? Guid.NewGuid();
于 2012-09-07T05:10:27.973 回答
7

Guid是一个结构而不是一个类,因此不能为空。

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

Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
于 2012-09-07T05:11:53.280 回答
4

GUID 是一种结构。 http://msdn.microsoft.com/en-us/library/system.guid.aspx

尝试使用Guid.Empty来进行检查。

Guid otherGuid = test == Guid.Empty ? Guid.NewGuid() : test;
于 2012-09-07T05:14:36.043 回答
0

正如其他人所说,Guid 是值类型而不是引用类型,请参阅此处以更深入地解释两者之间的区别。在您的方案中,您有两个选择。

  1. 聚结算子:
Guid? guid = null;
otherGuid = guid ?? Guid.NewGuid();
  1. default比较
otherGuid = guid == default ? Guid.NewGuid() : guid;

在第二个选项中,您也可以 guse Guid.Empty,但使用default关键字会更好。

于 2021-07-04T11:50:30.743 回答