为什么无参数Guid构造函数生成一个空GUID而不是像Guid.NewGuid()一样默认生成一个GUID?
空Guid有特殊用途吗?
答案 0 :(得分:33)
为什么无参数Guid构造函数生成一个空GUID而不是像Guid.NewGuid()一样默认生成一个GUID?
简短回答:因为语言/运行时没有让Guid类型的设计者定义默认构造函数。
不仅传统的“默认构造”结构的值为零,您根本无法为结构定义默认构造函数。当您说新的Guid()时,运行时会为您提供一个新对象,其中所有字段都初始化为其默认值:http://msdn.microsoft.com/en-us/library/ah19swz4%28VS.71%29.aspx
可在此处找到一些基本原理:http://www.yoda.arachsys.com/csharp/faq/#struct.constructors
答案 1 :(得分:3)
此行为与.Net框架中的其他值类型一致。当“新增”值类型时,使用默认值。这恰好是Guid的默认值,类似于Int32的默认值0。
答案 2 :(得分:2)
空guid对于表示缺少Guid非常有用。由于值类型不可为空(默认情况下是,您可以使用可为空)。
例如,我使用Guid作为Id属性很多因为它们真的很容易使用。因此,有一种方法可以查看对象是否已被持久化(即何时获取其ID),我可以针对空guid检查id的值。
答案 3 :(得分:2)
我认为结构或内置类型的默认值为零是常规的。