402 Stimmen

Guid.NewGuid() vs. new Guid()

Was ist der Unterschied zwischen Guid.NewGuid() y new Guid() ?

Welche wird bevorzugt?

669voto

MarkPflug Punkte 26601

new Guid() erzeugt eine "leere" all-0 guid (00000000-0000-0000-0000-000000000000 ist nicht sehr nützlich).

Guid.NewGuid() macht eine tatsächliche guid mit einem eindeutigen Wert, was Sie wahrscheinlich wollen.

46voto

Jon Hanna Punkte 106367

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.

17voto

Sudhanshu Mishra Punkte 6123

(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()

-1voto

Sharath Punkte 33

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 .

-1voto

Yusuf Alp Punkte 31

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.com

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.

Powered by:

X