Was ist der Unterschied zwischen Guid.NewGuid()
und new Guid()
?
Welches ist bevorzugt?
Was ist der Unterschied zwischen Guid.NewGuid()
und new Guid()
?
Welches ist bevorzugt?
Antworten:
new Guid()
macht eine "leere" All-0-Guid (00000000-0000-0000-0000-000000000000 ist nicht sehr nützlich).
Guid.NewGuid()
macht eine tatsächliche Guid mit einem einzigartigen Wert, was Sie wahrscheinlich wollen.
new Guid()
entspricht Guid.Empty
.
Guid.NewGuid()
Erstellt eine neue UUID mit einem Algorithmus, der Kollisionen sehr, sehr unwahrscheinlich macht.
new Guid()
Erstellt eine UUID, die aus Nullen besteht.
Im Allgemeinen würden Sie die erstere bevorzugen, da dies der Punkt einer UUID ist (es sei denn, Sie erhalten sie natürlich von einem anderen Ort).
Es gibt Fälle, in denen Sie zwar eine All-Zero-UUID wünschen, aber in diesem Fall Guid.Empty
oder wenn default(Guid)
Ihre Absicht klarer ist und die Wahrscheinlichkeit geringer ist, dass jemand, der sie liest, erwartet, dass ein eindeutiger Wert erstellt wurde.
Alles in allem new Guid()
ist das aufgrund dieser Unklarheit nicht nützlich, aber es ist nicht möglich, einen Werttyp zu haben, der keinen parameterlosen Konstruktor hat, der einen Wert für alle Nullen und Nullen zurückgibt.
Bearbeiten: Tatsächlich ist es möglich, einen parameterlosen Konstruktor für einen Werttyp zu haben, der nicht alles auf Null und Null setzt, aber Sie können dies nicht in C # tun und die Regeln darüber, wann und wann es aufgerufen wird Nur eine All-Zero-Struktur zu erstellen, ist verwirrend, daher ist es sowieso keine gute Idee.
[Ich verstehe, dass dies ein alter Thread ist, der nur einige Details hinzufügt] Die beiden Antworten von Mark und Jon Hanna fassen die Unterschiede zusammen, auch wenn es einige davon interessieren könnte
Guid.NewGuid()
Ruft schließlich CoCreateGuid auf (ein COM-Aufruf von Ole32) (Referenz hier ) und die eigentliche Arbeit wird von UuidCreate erledigt .
Guid.Empty soll verwendet werden, um zu überprüfen, ob eine Guid alle Nullen enthält. Dies könnte auch durch Vergleichen des Werts der fraglichen Guid mit der neuen Guid () erfolgen.
Wenn Sie also eine eindeutige Kennung benötigen , lautet die Antwort Guid.NewGuid ()
Guid.NewGuid()
, wie es GUIDs wie beabsichtigt erstellt.
Guid.NewGuid()
Erstellt ein leeres Guid
Objekt, initialisiert es durch Aufrufen CoCreateGuid
und gibt das Objekt zurück.
new Guid()
erstellt lediglich eine leere GUID (alle Nullen, denke ich).
Ich denke, sie mussten den Konstruktor so veröffentlichen, wie er Guid
ist struct
.