Guid.NewGuid()与新的Guid()

Guid.NewGuid()new Guid()什么区别?

哪一个是首选?

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

Guid.NewGuid()使用一个独特的值,你可能想要的是一个实际的GUID。

Guid.NewGuid()使用一种algorithm来创build一个新的UUID,这个algorithm被devise成非常非常不可能发生冲突。

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

一般来说,你会更喜欢前者,因为这是UUID的要点(除非你从别的地方接收它)。

有些情况确实需要一个全零的UUID,但是在这种情况下, Guid.Empty或者default(Guid)会更清楚你的意图,而且有人阅读它的可能性很小,期望创build一个独特的值。

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

编辑:实际上,可能有一个无参数的构造函数的值types,并没有将所有的东西都设置为零和空值,但你不能在C#中做到这一点,以及什么时候将被调用的规则,什么时候会只是一个全零结构造成混乱,所以这不是一个好主意。

[我明白这是一个古老的线索,只是添加更多的细节]马克和乔恩汉纳的两个答案总结了分歧,虽然它可能会感兴趣的一些

 Guid.NewGuid() 

最后调用CoCreateGuid(一个COM调用Ole32)(参考这里 ),实际的工作是由UuidCreate完成的。

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

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

Guid.NewGuid(),因为它创build了预期的GUID。

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

新的Guid()只是创build一个空的GUID(全部为零)。

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