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.Emptyczy 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 Guidobiekt, inicjuje go, wywołując CoCreateGuidi zwraca obiekt.
new Guid() tworzy jedynie pusty identyfikator GUID (chyba wszystkie zera).
Myślę, że musieli upublicznić konstruktora tak jak Guidjest struct.