Guid. newguid () vs. new Guid()

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

哪个是首选?

220216 次浏览

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

Guid.NewGuid()创建了一个具有唯一值的实际guid,这可能是你想要的。

Guid.NewGuid()创建了一个新的UUID,使用的算法被设计成使碰撞非常非常不可能。

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

通常情况下,您更喜欢前者,因为这是UUID的意义所在(当然,除非您是从其他地方接收它)。

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

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

编辑:实际上,在一个值类型上有一个无参数的构造函数是可能的,它不把所有的东西都设置为0和null,但你不能在c#中这样做,而且关于什么时候调用它以及什么时候只创建一个全0结构体的规则是令人困惑的,所以这不是一个好主意。

[我知道这是一个旧线程,只是增加了一些细节] Mark和Jon Hanna的两个回答总结了差异,尽管它可能会引起一些人的兴趣

Guid.NewGuid()

最终调用CoCreateGuid(对Ole32的COM调用)(引用在这里),实际工作由UuidCreate完成。

Guid。Empty用于检查Guid是否包含全零。这也可以通过将Guid的值与新的Guid ()进行比较来实现

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

Guid.NewGuid(),因为它会按照预期创建guid。

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

new Guid()仅仅创建了一个空的GUID(我认为都是0)。

我猜他们必须将构造函数设为公共的,因为Guidstruct

Guid.NewGuid()初始化Guid结构的一个新实例。

例子:

Guid g = Guid.NewGuid();
Console.WriteLine(g);


// This code example produces a result similar to the following:


// 0f8fad5b-d9cb-469f-a165-70867728950e

该方法创建一个版本4通用唯一标识符(UUID),如RFC 4122,第4.4节所述

正如前面提到的在官方文件中

返回的Guid保证不等于Guid. empty。