使用NewGuid();
vs System.Guid.NewGuid().ToString("D");
生成GUID时是否存在差异,或者它们是相同的?
答案 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,那么使用构造函数很有用。您还可以使用Parse,ParseExact,TryParse和TryParseExact方法。
所以,你可以创建这样的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的内部表示一个外部的字符串格式。字符串采用的格式取决于传递给字符串方法的参数。