Guid.NewGuid()
和之间有什么区别new Guid()
?
首选哪一个?
Guid.NewGuid()
和之间有什么区别new Guid()
?
首选哪一个?
Answers:
new Guid()
使“空”全0 guid(00000000-0000-0000-0000-000000000000不太有用)。
Guid.NewGuid()
用您可能想要的唯一值制作一个实际的Guid。
new Guid()
等同于Guid.Empty
。
Guid.NewGuid()
使用旨在使碰撞非常非常不可能发生的算法创建新的UUID。
new Guid()
创建一个全零的UUID。
通常,您会更喜欢前者,因为这就是UUID的意义(除非您当然从其他地方收到它)。
在某些情况下,您确实确实需要全零的UUID,但是在这种情况下,Guid.Empty
或者default(Guid)
您的意图更加明确,并且有人希望创建唯一值的可能性很小。
总而言之,new Guid()
由于缺乏清晰性,它不是很有用,但是不可能有没有没有参数的构造函数返回全零和空值的值类型。
编辑:实际上,有可能在没有将所有内容都设置为零和null的值类型上有一个无参数的构造函数,但是您不能在C#中做到这一点,还有关于何时以及何时调用它的规则只是被创建的全零结构令人困惑,所以这不是一个好主意。
[我理解这是一个老话题,只是增加了一些细节] Mark和Jon Hanna的两个答案总结了这些差异,尽管可能有人对此感兴趣。
Guid.NewGuid()
最终调用CoCreateGuid(对Ole32的COM调用)(在此处参考),实际工作由UuidCreate完成。
Guid.Empty用于检查Guid是否包含全零。也可以通过将有问题的Guid的值与新的Guid()进行比较来完成
因此,如果您需要一个唯一的标识符,答案是Guid.NewGuid()