NewGuid vs System.Guid.NewGuid()。ToString(“D”);

时间:2011-09-22 10:34:48

标签: c# .net guid

使用NewGuid(); vs System.Guid.NewGuid().ToString("D");生成GUID时是否存在差异,或者它们是相同的?

4 个答案:

答案 0 :(得分:134)

我意识到这个问题已经有了一个公认的答案,但我认为分享一些有关格式化guid的信息会很有用。

ToString() (no parameters) method使用以下格式格式化guid:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

ToString(string format) method以多种方式之一格式化guid:

"N" - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx (32 digits)
"D" - xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (32 digits separated by hyphens)
"B" - {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} (same as "D" with addition of braces)
"P" - (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) (same as "D" with addition of parentheses)
"X" - {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

调用Guid.ToString("D")会产生与调用Guid.ToString()相同的结果。

正如其他答案所述,guid本身没有格式。这只是一个价值。注意,您可以使用NewGuid或使用guid的构造函数创建guid。使用NewGuid,您无法控制guid的值。使用guid的构造函数,您可以控制值。如果你已经有一个guid的字符串表示(也许你是从数据库中读取它),或者如果你想在开发过程中更容易解释一个guid,那么使用构造函数很有用。您还可以使用ParseParseExactTryParseTryParseExact方法。

所以,你可以创建这样的guid:

Guid g1 = Guid.NewGuid(); //Get a Guid without any control over the contents
Guid g2 = new Guid(new string('A',32)); //Get a Guid where all digits == 'A'
Guid g3 = Guid.Parse(g1.ToString());
Guid g4 = Guid.ParseExact(g1.ToString("D"),"D");
Guid g5;
bool b1 = Guid.TryParse(g1.ToString(), out g5);
Guid g6;
bool b2 = Guid.TryParseExact(g1.ToString("D"),"D", out g6);

答案 1 :(得分:20)

Guid.NewGuid().ToString()是GUID的字符串表示形式,即返回string个对象,而Guid.NewGuid()返回Guid数据类型。

答案 2 :(得分:3)

使用System.Guid.NewGuid(),您将获得Guid类型

的对象

使用System.Guid.NewGuid().ToString("D");,您将获得Guid对象

的字符串表示形式

另据我所知,.ToString("D").ToString()

之间没有区别

答案 3 :(得分:3)

两者的生成算法必须相同,因为System.Guid.NewGuid().ToString("D")正在调用System.Guid.NewGuid(),然后在结果上调用ToString,即,两个示例都调用相同的生成guid的方法。至于比较“格式” - 这没有意义,因为System.Guid.NewGuid()没有与System.Guid.NewGuid().ToString("D")相同的“格式” - 只能通过调用ToString方法你给guid的内部表示一个外部的字符串格式。字符串采用的格式取决于传递给字符串方法的参数。