384

Guid.NewGuid()和有什么区别new Guid()

哪个是首选?

4

4 回答 4

645

new Guid()制作一个“空”的全0 guid(00000000-0000-0000-0000-000000000000 不是很有用)。

Guid.NewGuid()制作具有独特价值的实际指南,您可能想要什么。

于 2012-08-13T16:11:57.753 回答
44

Guid.NewGuid()使用旨在使冲突非常非常不可能发生的算法创建一个新的 UUID。

new Guid()创建一个全零的 UUID。

一般来说,您更喜欢前者,因为这是 UUID 的意义所在(当然,除非您是从其他地方接收它)。

在某些情况下,您确实想要一个全零的 UUID,但在这种情况下Guid.Emptydefault(Guid)您的意图更加清晰,并且阅读它的人期望已创建唯一值的可能性较小。

总而言之,new Guid()由于缺乏清晰性,这不是很有用,但是不可能有一个没有返回全零和空值的无参数构造函数的值类型。

编辑:实际上,可以在不将所有内容设置为零和 null 的值类型上使用无参数构造函数,但您不能在 C# 中执行此操作,以及关于何时调用以及何时调用的规则只是创建一个全零结构是令人困惑的,所以无论如何这都不是一个好主意。

于 2012-08-13T16:19:11.753 回答
17

[我知道这是一个旧线程,只是添加了更多细节] Mark 和 Jon Hanna 的两个答案总结了差异,尽管它可能会让一些人感兴趣

Guid.NewGuid()

最终调用 CoCreateGuid(对 Ole32 的 COM 调用)(参考此处),实际工作由UuidCreate完成。

Guid.Empty 用于检查 Guid 是否包含全零。这也可以通过将所讨论的 Guid 的值与new Guid()进行比较来完成

所以,如果你需要一个唯一标识符,答案是Guid.NewGuid()

于 2014-04-08T06:00:16.480 回答
-1

Guid.NewGuid(),因为它按预期创建 GUID。

Guid.NewGuid()创建一个空Guid对象,通过调用初始化它CoCreateGuid并返回该对象。

new Guid()只是创建一个空的 GUID(我认为全为零)。

我猜他们必须将构造函数公开Guidstruct.

于 2016-08-31T03:48:20.537 回答