NewGuid против System.Guid.NewGuid (). ToString ("D"); - PullRequest
27 голосов
/ 22 сентября 2011

Есть ли разница, когда вы генерируете GUID, используя NewGuid(); против System.Guid.NewGuid().ToString("D"); или это одно и то же?

Ответы [ 4 ]

135 голосов
/ 29 сентября 2011

Я понимаю, что на этот вопрос уже есть принятый ответ, но я подумал, что было бы полезно поделиться некоторой информацией о руководствах по форматированию.

Метод ToString () (без параметров) форматирует направляющую, используя этот формат:

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().

Как уже упоминалось в других ответах, само руководство не имеет формата. Это просто ценность. Обратите внимание, что вы можете создавать направляющие, используя NewGuid или конструктор guid. Используя NewGuid, вы не можете контролировать значение guid. Используя конструктор guid, вы можете контролировать значение. Использование конструктора полезно, если у вас уже есть строковое представление guid (может быть, вы читаете его из базы данных) или если вы хотите упростить интерпретацию guid во время разработки. Вы также можете использовать методы Parse , ParseExact , TryParse и TryParseExact .

Итак, вы можете создавать направляющие следующим образом:

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);
20 голосов
/ 22 сентября 2011

Guid.NewGuid().ToString() - это строковое представление GUID, то есть возвращает string объект, а Guid.NewGuid() возвращает Guid тип данных.

3 голосов
/ 22 сентября 2011

Алгоритм генерации должен быть одинаковым для обоих, потому что System.Guid.NewGuid().ToString("D") вызывает System.Guid.NewGuid(), а затем вызывает ToString для результата, т.е. оба ваших примера вызывают один и тот же метод для генерации guid. Что касается сравнения «формата» - это не имеет смысла, потому что System.Guid.NewGuid() не имеет «формата» так же, как System.Guid.NewGuid().ToString("D") - только путем вызова метода ToString вы даете внутреннее представление Гид внешний, строковый формат. Формат строки будет зависеть от аргумента, переданного методу string.

3 голосов
/ 22 сентября 2011

Используя System.Guid.NewGuid(), вы получите объект Guid типа

Используя System.Guid.NewGuid().ToString("D");, вы получите строковое представление Guid object

Также, как я знаю, нет никакой разницы между .ToString("D") и .ToString()

...