Qual è la differenza tra Guid.NewGuid()
enew Guid()
?
Quale è preferito?
Qual è la differenza tra Guid.NewGuid()
enew Guid()
?
Quale è preferito?
Risposte:
new Guid()
rende un guid "0" tutto vuoto (00000000-0000-0000-0000-000000000000 non è molto utile).
Guid.NewGuid()
crea un vero guid con un valore unico, quello che probabilmente vuoi.
new Guid()
equivale a Guid.Empty
.
Guid.NewGuid()
crea un nuovo UUID usando un algoritmo progettato per rendere le collisioni molto, molto improbabili.
new Guid()
crea un UUID composto da zero.
Generalmente preferiresti il primo, perché questo è il punto di un UUID (a meno che tu non lo riceva da qualche altra parte ovviamente).
Ci sono casi in cui vuoi davvero un UUID tutto zero, ma in questo caso Guid.Empty
odefault(Guid)
è più chiaro sulle tue intenzioni e c'è meno possibilità che qualcuno lo legga aspettandosi che fosse stato creato un valore unico.
In tutto, new Guid()
non è utile a causa di questa mancanza di chiarezza, ma non è possibile avere un tipo di valore che non ha un costruttore senza parametri che restituisce un valore di zero e zero.
Modifica: in realtà, è possibile avere un costruttore senza parametri su un tipo di valore che non imposta tutto su zero e null, ma non è possibile farlo in C # e le regole su quando verrà chiamato e quando ci sarà solo essere una struttura a zero creata crea confusione, quindi non è comunque una buona idea.
[Capisco che questo è un vecchio thread, aggiungendo solo qualche dettaglio in più] Le due risposte di Mark e Jon Hanna riassumono le differenze, anche se potrebbe interessare che
Guid.NewGuid()
Alla fine chiama CoCreateGuid (una chiamata COM a Ole32) (riferimento qui ) e il lavoro effettivo viene svolto da UuidCreate .
Guid.Empty deve essere utilizzato per verificare se un Guid contiene tutti gli zero. Questo potrebbe essere fatto anche confrontando il valore del Guid in questione con il nuovo Guid ()
Quindi, se hai bisogno di un identificatore univoco , la risposta è Guid.NewGuid ()
Guid.NewGuid()
, in quanto crea GUID come previsto.
Guid.NewGuid()
crea un Guid
oggetto vuoto , lo inizializza chiamandoCoCreateGuid
e restituisce l'oggetto.
new Guid()
crea semplicemente un GUID vuoto (tutti zeri, credo).
Immagino che dovessero rendere pubblico il costruttore come Guid
è un struct
.