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

哪个是首选?


当前回答

newguid(),因为它会按预期创建guid。

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

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

我猜他们必须把构造函数设为公共的,因为Guid是一个结构体。

其他回答

newguid()使用一种算法创建一个新的UUID,该算法被设计成使冲突非常非常不可能发生。

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

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

在某些情况下,您确实需要一个全零UUID,但在本例中是Guid。空的或默认的(Guid)更清楚您的意图,并且阅读它的人期望已经创建了一个唯一值的可能性更小。

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

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

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

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

[我知道这是一个旧的线程,只是增加了一些细节] 马克和乔恩·汉纳的两个回答总结了两者的区别,尽管有些人可能会感兴趣

Guid.NewGuid()

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

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

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

newguid(),因为它会按预期创建guid。

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

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

我猜他们必须把构造函数设为公共的,因为Guid是一个结构体。

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。