【问题标题】:Why does the parameterless Guid constructor generate an empty GUID?为什么无参数的 Guid 构造函数会生成一个空的 GUID?
【发布时间】:2010-09-28 21:48:38
【问题描述】:

为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?

空的 Guid 有什么特殊用途吗?

【问题讨论】:

    标签: c# .net guid default-constructor


    【解决方案1】:

    为什么无参数的 Guid 构造函数会生成一个空的 GUID,而不是像 Guid.NewGuid() 那样默认生成一个?

    简短回答:因为语言/运行时没有让 Guid 类型的设计者定义默认构造函数。

    “默认构造”结构的值为零不仅是惯例,而且您根本无法为结构定义默认构造函数。当您说 new Guid() 时,运行时会为您提供一个新对象,其中所有字段都初始化为其默认值:http://msdn.microsoft.com/en-us/library/ah19swz4%28VS.71%29.aspx

    一些基本原理可以在这里找到:https://web.archive.org/web/20131102220804/http://www.yoda.arachsys.com/csharp/faq/#struct.constructors

    【讨论】:

    • 嘿嘿,猜猜那个 www.yoda.arachsys.com C# FAQ 的作者是谁?小提示:以“J”开头,以“on Skeet”结尾
    • 我并不感到惊讶,Jon 真的什么都知道 ;-)。
    【解决方案2】:

    此行为与 .Net 框架中的其余值类型一致。当“更新”一个值类型时,使用一个默认值。这恰好是 Guid 的默认值,类似于 Int32 的默认值 0。

    【讨论】:

      【解决方案3】:

      空的 guid 可用于表示缺少 Guid。由于值类型不可为空(默认情况下是的,您可以使用可为空的)。

      例如,我经常使用 Guid 作为 Id 属性,因为它们非常易于使用。因此,一种查看对象是否已持久化的方法(即当它获取其 Id 时),我可以根据空 guid 检查 id 的值。

      【讨论】:

        【解决方案4】:

        我认为结构或内置类型的默认值为零是惯例。

        【讨论】:

          猜你喜欢
          • 2015-06-12
          • 2021-01-22
          • 2019-02-19
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多