Quelle est la différence entre Guid.NewGuid()
et new Guid()
?
Lequel est préféré?
Quelle est la différence entre Guid.NewGuid()
et new Guid()
?
Lequel est préféré?
Réponses:
new Guid()
fait un guid "0" tout vide (00000000-0000-0000-0000-000000000000 n'est pas très utile).
Guid.NewGuid()
fait un guide réel avec une valeur unique, ce que vous voulez probablement.
new Guid()
est équivalent à Guid.Empty
.
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 entièrement composé de zéros.
En général, vous préféreriez le premier, car c'est le but d'un UUID (à moins que vous ne le receviez d'un autre endroit bien sûr).
Il y a des cas où vous voulez en effet un UUID entièrement nul, 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 lise s'attendant à ce qu'une valeur unique ait été créée.
Dans l'ensemble, new Guid()
n'est-ce pas utile en raison de ce manque de clarté, mais il n'est pas possible d'avoir un type de valeur qui n'a pas de constructeur sans paramètre qui retourne une valeur tout à zéro et null.
Edit: En fait, il est possible d'avoir un constructeur sans paramètre sur un type de valeur qui ne met pas tout à zéro et à null, mais vous ne pouvez pas le faire en C #, et les règles sur quand il sera appelé et quand il y aura être une structure entièrement nulle crée de la confusion, donc ce n'est pas une bonne idée de toute façon.
[Je comprends que c'est un vieux fil, juste en ajoutant plus de détails] Les deux réponses de Mark et Jon Hanna résument les différences, même si cela peut intéresser certains qui
Guid.NewGuid()
Appelle éventuellement CoCreateGuid (un appel COM à Ole32) (référence ici ) et le travail réel est effectué par UuidCreate .
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 le nouveau Guid ()
Donc, si vous avez besoin d'un identifiant unique , la réponse est Guid.NewGuid ()
Guid.NewGuid()
, car il crée des GUID comme prévu.
Guid.NewGuid()
crée un Guid
objet vide , l'initialise en appelant CoCreateGuid
et renvoie l'objet.
new Guid()
crée simplement un GUID vide (tous des zéros, je pense).
Je suppose qu'ils ont dû rendre le constructeur public tel Guid
quel struct
.