Was ist der Unterschied zwischen Guid.NewGuid()
y new Guid()
?
Welche wird bevorzugt?
Was ist der Unterschied zwischen Guid.NewGuid()
y new Guid()
?
Welche wird bevorzugt?
Guid.NewGuid()
erstellt eine neue UUID mit einem Algorithmus, der Kollisionen sehr, sehr unwahrscheinlich machen soll.
new Guid()
erstellt eine UUID, die nur aus Nullen besteht.
Im Allgemeinen würden Sie Ersteres bevorzugen, denn das ist der Sinn einer UUID (es sei denn, Sie erhalten sie von einem anderen Ort).
Es gibt Fälle, in denen Sie tatsächlich eine UUID mit Nullen wollen, aber in diesem Fall Guid.Empty
o default(Guid)
ist klarer, was Ihre Absicht ist, und es ist weniger wahrscheinlich, dass jemand beim Lesen erwartet, dass ein einzigartiger Wert geschaffen worden ist.
Alles in allem, new Guid()
ist aufgrund dieser Unklarheit nicht sehr nützlich, aber es ist nicht möglich, einen Werttyp zu haben, der keinen parameterlosen Konstruktor hat, der einen Wert mit Nullen und Nullen zurückgibt.
Bearbeiten: Eigentlich ist es möglich, einen parameterlosen Konstruktor für einen Werttyp zu haben, der nicht alles auf Null und Null setzt, aber man kann es nicht in C# tun, und die Regeln darüber, wann es aufgerufen wird und wann nur eine Struktur mit Null erstellt wird, sind verwirrend, also ist es sowieso keine gute Idee.
(Ich weiß, dass dies ein altes Thema ist, ich füge nur einige weitere Details hinzu) Die beiden Antworten von Mark und Jon Hanna bringen die Unterschiede auf den Punkt, auch wenn es einige interessieren mag, dass
Guid.NewGuid()
Schließlich ruft CoCreateGuid (ein COM-Aufruf an Ole32) auf (Verweis aquí ) und die eigentliche Arbeit wird geleistet durch UuidCreate .
Guid.Empty soll dazu dienen, zu prüfen, ob eine Guid alle Nullen enthält. Dies könnte auch durch einen Vergleich des Wertes der fraglichen Guid mit new Guid()
Wenn Sie also eine eindeutiger Bezeichner lautet die Antwort Guid.NewGuid()
Guid.NewGuid()
da es wie vorgesehen GUIDs erzeugt.
Guid.NewGuid()
erzeugt eine leere Guid
Objekt, initialisiert es durch den Aufruf CoCreateGuid
und gibt das Objekt zurück.
new Guid()
erzeugt lediglich eine leere GUID (alle Nullen, glaube ich).
Ich schätze, sie mussten den Konstruktor öffentlich machen, da Guid
es un struct
.
Guid.NewGuid()
initialisiert eine neue Instanz der Guid-Struktur.
Ejemplo:
Guid g = Guid.NewGuid();
Console.WriteLine(g);
// This code example produces a result similar to the following:
// 0f8fad5b-d9cb-469f-a165-70867728950e
Die Methode erstellt einen Version 4 Universally Unique Identifier (UUID) wie in RFC 4122, Abschnitt 4.4
Auch wie erwähnt in dem offiziellen Dokument ,
Die zurückgegebene Guid ist garantiert nicht gleich Guid.Empty.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.