web-dev-qa-db-fra.com

NewGuid vs System.Guid.NewGuid (). ToString ("D");

Y a-t-il une différence lorsque vous générez un GUID en utilisant NewGuid(); vs System.Guid.NewGuid().ToString("D"); ou c'est la même chose?

27
001

Guid.NewGuid().ToString() est une représentation sous forme de chaîne du GUID, c'est-à-dire renvoie string objet, tandis que Guid.NewGuid() renvoie Guid type de données.

20
Kirill Polishchuk

Je me rends compte que cette question a déjà une réponse acceptée, mais j'ai pensé qu'il serait utile de partager des informations sur le formatage des guides.

La méthode ToString () (aucun paramètre) formate un guid en utilisant ce format:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

La méthode ToString (format de chaîne) formate un guid de plusieurs manières:

"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}}

L'appel de Guid.ToString("D") donne le même résultat que l'appel de Guid.ToString().

Comme mentionné dans les autres réponses, le guide lui-même n'a pas de format. C'est juste une valeur. Notez que vous pouvez créer des guides en utilisant NewGuid ou en utilisant le constructeur du guid. En utilisant NewGuid, vous n'avez aucun contrôle sur la valeur du guid. En utilisant le constructeur du guid, vous pouvez contrôler la valeur. L'utilisation du constructeur est utile si vous avez déjà une représentation sous forme de chaîne d'un guid (peut-être que vous la lisez dans une base de données) ou si vous voulez faciliter l'interprétation d'un guid pendant le développement. Vous pouvez également utiliser les méthodes Parse , ParseExact , TryParse et TryParseExact .

Vous pouvez donc créer des guides comme celui-ci:

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);
137
wageoghe

L'algorithme de génération doit être le même pour les deux, car System.Guid.NewGuid().ToString("D") appelle System.Guid.NewGuid(), puis appelle ToString sur le résultat, c'est-à-dire que vos deux exemples appellent la même méthode pour générer le guid. Quant à comparer le "format" - cela n'a pas de sens car System.Guid.NewGuid() n'a pas de "format" de la même manière que System.Guid.NewGuid().ToString("D") - ce n'est qu'en appelant le ToString méthode qui donne à la représentation interne du guid un format de chaîne externe. Le format de la chaîne dépend de l'argument que vous passez à la méthode chaîne.

4
Polyfun

En utilisant System.Guid.NewGuid() vous obtiendrez un objet de type Guid

En utilisant System.Guid.NewGuid().ToString("D"); vous obtiendrez la représentation sous forme de chaîne de l'objet Guid

Aussi, comme je ne connais aucune différence entre .ToString("D") et .ToString()

4
Samich