NewGuid vs System.Guid.NewGuid()。ToString(“D”);
使用NewGuid();
生成GUID时是否有区别NewGuid();
vs System.Guid.NewGuid().ToString("D");
或者他们是一回事?
Guid.NewGuid().ToString()
是GUID的字符串表示,即返回string
对象,而Guid.NewGuid()
返回Guid
数据类型。
我意识到这个问题已经有了一个公认的答案,但我认为分享一些关于格式化guid的信息会很有用。
ToString()(无参数)方法使用以下格式格式化guid:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ToString(字符串格式)方法通过以下几种方式之一格式化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的字符串表示forms(也许你是从数据库中读取它),或者如果你想在开发过程中更容易解释一个guid,那么使用构造函数很有用。 您还可以使用Parse , ParseExact , TryParse和TryParseExact方法。
所以,你可以创建像这样的guids:
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);
使用System.Guid.NewGuid()
您将获得Guid
类型的对象
使用System.Guid.NewGuid().ToString("D");
你将获得Guid
对象的字符串表示
另外我知道.ToString("D")
和.ToString()
之间没有区别
两者的生成算法必须相同,因为System.Guid.NewGuid().ToString("D")
正在调用System.Guid.NewGuid()
,然后在结果上调用ToString
,即两个示例正在调用相同的方法来生成guid。 至于比较“格式” – 这没有意义,因为System.Guid.NewGuid()
没有与System.Guid.NewGuid().ToString("D")
相同的“格式” System.Guid.NewGuid().ToString("D")
– 它是只有通过调用ToString
方法,您才能为guid的内部表示提供外部字符串格式。 字符串采用的格式取决于传递给字符串方法的参数。