Guid. newguid()和new Guid()之间有什么区别?
哪个是首选?
Guid. newguid()和new 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是一个结构体。
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()初始化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()
最终调用CoCreateGuid(对Ole32的COM调用)(此处引用),实际工作由UuidCreate完成。
Guid。Empty用于检查Guid是否包含全零。这也可以通过比较Guid的值和new Guid()来实现
所以,如果你需要一个唯一的标识符,答案是Guid.NewGuid()