web-dev-qa-db-fra.com

Guid.NewGuid () vs nouveau Guid ()

Quelle est la différence entre Guid.NewGuid() et new Guid()?

Lequel est préféré?

314
OscarRyz

new Guid() crée un guide "vide" all-0 (00000000-0000-0000-0000-000000000000 n'est pas très utile).

Guid.NewGuid() crée un guide avec une valeur unique, ce que vous voulez probablement.

528
MarkPflug

Guid.NewGuid() crée un nouvel UUID à l'aide d'un algorithme conçu pour rendre les collisions très, très improbables.

new Guid() crée un UUID composé uniquement de zéros.

En général, vous préféreriez l'ancien, parce que c'est l'intérêt d'un UUID (à moins que vous ne le receviez d'ailleurs).

Il y a des cas où vous voulez vraiment un UUID à zéro, mais dans ce cas, Guid.Empty ou default(Guid) est plus clair sur votre intention et il y a moins de chance que quelqu'un le lisant s'attendant à ce qu'une valeur unique ait été créée. .

En tout, new Guid() n'est pas utile en raison de ce manque de clarté, mais il n'est pas possible d'avoir un type de valeur qui ne possède pas de constructeur sans paramètre qui retourne une valeur contenant uniquement des zéros et des valeurs nulles.

Edit: En fait, il est possible d’avoir un constructeur sans paramètre sur un type de valeur qui ne règle pas tout sur zéro et null, mais vous ne pouvez pas le faire en C #, et les règles sur le moment où il sera appelé et quand juste être une structure tout à zéro créée sont source de confusion, donc ce n'est pas une bonne idée de toute façon.

37
Jon Hanna

[Je comprends que c’est un vieux fil, il suffit d’ajouter quelques détails supplémentaires] Les deux réponses de Mark et Jon Hanna résument les différences, bien qu’il puisse en intéresser certains que

Guid.NewGuid()

Appelle finalement CoCreateGuid (un appel COM à Ole32) (référence ici ) et le travail réel est effectué par idCreate .

Guid.Empty est destiné à être utilisé pour vérifier si un Guid contient tous les zéros. Cela pourrait également être fait en comparant la valeur du Guid en question avec new Guid ()

Donc, si vous avez besoin d’un identifiant unique , la réponse est Guid.NewGuid ()

16
Sudhanshu Mishra