Guid.NewGuid()
和new Guid()
有什么区别?
哪一个更受推荐?
Guid.NewGuid()
和new Guid()
有什么区别?
哪一个更受推荐?
new Guid()
创建一个“空”全零 GUID(00000000-0000-0000-0000-000000000000 并不是很有用)。
Guid.NewGuid()
创建一个具有唯一值的实际 GUID,这可能是您想要的。
new Guid()
相当于 Guid.Empty
。 - Steve GuidiGuid.NewGuid()
使用一个设计良好的算法创建新的UUID,以使碰撞的可能性非常小。
new Guid()
创建全零UUID。
通常情况下,您应该选择前者,因为这是UUID的目的(除非您当然从其他地方接收到它)。
有些情况下,确实需要一个全零的UUID,但在这种情况下,Guid.Empty
或 default(Guid)
更清晰地表达了您的意图,并且人们读取时不会期望已创建一个唯一值。
总的来说,由于缺乏明确性,new Guid()
并不是很有用,但无法拥有没有参数的构造函数返回全零和空值的值类型。
编辑:实际上,在值类型上拥有不设置所有值为零和空的无参数构造函数是可能的,但您无法在C#中实现,而什么时候将调用它以及何时将仅创建全零结构的规则很困惑,因此这也不是一个好主意。
[我理解这是一个旧帖子,只是添加一些更多细节] Mark和Jon Hanna的两个答案概括了区别,但也许有些人会感兴趣的是
Guid.NewGuid()
最终调用CoCreateGuid(一个COM调用到Ole32)(参考这里),实际的工作由UuidCreate完成。
Guid.Empty用于检查Guid是否包含了所有的零。这也可以通过比较相应的Guid值与new Guid()来完成。
所以,如果你需要一个唯一标识符,答案就是Guid.NewGuid()。
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。
Guid.NewGuid()
可以创建 GUIDs。
Guid.NewGuid()
创建一个空的 Guid
对象,通过调用 CoCreateGuid
进行初始化并返回该对象。
new Guid()
仅仅创建一个空的 GUID(所有位都是零,我想)。
我猜他们必须将构造函数设置为公共的,因为 Guid
是一个 struct
。