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的内部表示提供外部字符串格式。 字符串采用的格式取决于传递给字符串方法的参数。