Guid.NewGuid()与新Guid()

时间:2012-08-13 16:10:11

标签: c# guid

Guid.NewGuid()new Guid()之间有什么区别?

哪一个更受欢迎?

4 个答案:

答案 0 :(得分:518)

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

Guid.NewGuid()使用您可能想要的唯一值制作一个实际的guid。

答案 1 :(得分:37)

Guid.NewGuid()使用一种算法创建一个新的UUID,该算法旨在使冲突变得非常非常不可能。

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

一般来说,你更喜欢前者,因为那是UUID的重点(除非你当然是从其他地方接收它)。

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

总之,new Guid()由于缺乏清晰度而没有那么有用,但是不可能有一个没有无参数构造函数的值类型返回全零 - 和 - nulls value。

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

答案 2 :(得分:16)

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

Guid.NewGuid()

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

Guid.Empty用于检查Guid是否包含全零。这也可以通过比较有问题的Guid的值与新Guid()

来完成

因此,如果您需要唯一标识符,答案是 Guid.NewGuid()

答案 3 :(得分:-2)

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

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

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

我猜他们必须公开构造函数,因为Guidstruct