Jaka jest różnica między Guid.NewGuid()
i new Guid()
?
Który jest preferowany?
Jaka jest różnica między Guid.NewGuid()
i new Guid()
?
Który jest preferowany?
Odpowiedzi:
new Guid()
sprawia, że „pusta” wartość „0” (00000000-0000-0000-0000-000000000000 nie jest zbyt przydatna).
Guid.NewGuid()
tworzy prawdziwy przewodnik z unikalną wartością, czego prawdopodobnie chcesz.
new Guid()
odpowiada Guid.Empty
.
Guid.NewGuid()
tworzy nowy UUID za pomocą algorytmu zaprojektowanego tak, aby kolizje były bardzo, bardzo mało prawdopodobne.
new Guid()
tworzy identyfikator UUID składający się z samych zer.
Zasadniczo wolałbyś ten pierwszy, ponieważ o to chodzi w UUID (chyba że otrzymujesz go skądś indziej).
Istnieją przypadki, gdzie rzeczywiście chce się wszystko od zera UUID, ale w tym przypadku, Guid.Empty
czy default(Guid)
jest jaśniejszy o swoją intencją, i jest mniejsza szansa, że ktoś czyta to spodziewa się unikalną wartość został utworzony.
Podsumowując, new Guid()
nie jest to użyteczne z powodu tego braku jasności, ale nie można mieć typu wartości, który nie ma konstruktora bez parametrów, który zwraca wartość zera i zera.
Edycja: W rzeczywistości możliwe jest posiadanie konstruktora bez parametrów na typ wartości, który nie ustawia wszystkiego na zero i zero, ale nie można tego zrobić w języku C # i regułach określających, kiedy zostanie on wywołany, a kiedy będzie po prostu bądź strukturą zero, są tworzone mylące, więc i tak nie jest to dobry pomysł.
[Rozumiem, że to stary wątek, tylko dodając trochę więcej szczegółów] Dwie odpowiedzi Marka i Jona Hanny podsumowują różnice, chociaż może to zainteresować
Guid.NewGuid()
W końcu wywołuje CoCreateGuid (wywołanie COM do Ole32) (odniesienie tutaj ), a faktyczna praca jest wykonywana przez UuidCreate .
Guid.Empty służy do sprawdzania, czy Guid zawiera wszystkie zera. Można to również zrobić poprzez porównanie wartości omawianego Guida z nowym Guid ()
Jeśli potrzebujesz unikalnego identyfikatora , odpowiedzią jest Guid.NewGuid ()
Guid.NewGuid()
, ponieważ tworzy identyfikatory GUID zgodnie z przeznaczeniem.
Guid.NewGuid()
tworzy pusty Guid
obiekt, inicjuje go, wywołując CoCreateGuid
i zwraca obiekt.
new Guid()
tworzy jedynie pusty identyfikator GUID (chyba wszystkie zera).
Myślę, że musieli upublicznić konstruktora tak jak Guid
jest struct
.