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是一个结构体。