Яка різниця між Guid.NewGuid()
і new Guid()
?
Який із них кращий?
Яка різниця між Guid.NewGuid()
і new Guid()
?
Який із них кращий?
Відповіді:
new Guid()
робить "порожній" орієнтир "0" (00000000-0000-0000-0000-000000000000 не дуже корисно).
Guid.NewGuid()
робить фактичне керівництво з унікальним значенням, чого ви, мабуть, хочете.
new Guid()
рівнозначна Guid.Empty
.
Guid.NewGuid()
створює новий UUID за допомогою алгоритму, який призначений робити колізії дуже, дуже малоймовірними.
new Guid()
створює UUID, який є всіма нулями.
Як правило, ви віддаєте перевагу першому, тому що це сенс UUID (якщо ви, звичайно, не отримуєте його десь із іншого).
Бувають випадки, коли ви дійсно хочете, щоб UUID був повністю нульовим, але в цьому випадку Guid.Empty
або default(Guid)
зрозуміліше ваші наміри, і менше шансів, що хтось прочитає його, очікуючи, що буде створено унікальне значення.
Загалом, new Guid()
це не так корисно через цю відсутність ясності, але неможливо мати тип значення, який не має конструктора без параметрів, який повертає значення нулі та нулі.
Редагувати: Насправді можна створити конструктор без параметрів для типу значення, який не встановлює все на нуль та нуль, але ви не можете це зробити в C #, а також правила про те, коли воно буде викликано і коли буде просто будьте створені цілком нульові структури - заплутані, тому це все одно не дуже гарна ідея.
[Я розумію, що це стара тема, просто додаю трохи детальніше] Два відповіді Марка та Джона Ханни підсумовують відмінності, хоча це може зацікавити, що
Guid.NewGuid()
Врешті-решт зателефонує CoCreateGuid (COM-виклик на Ole32) (посилання тут ) і фактичну роботу виконує UuidCreate .
Guid.Empty призначений для перевірки, чи містить Guid всі нулі. Це також можна зробити, порівнюючи значення відповідного Посібника з новим Guid ()
Отже, якщо вам потрібен унікальний ідентифікатор , відповідь - Guid.NewGuid ()
Guid.NewGuid()
, оскільки він створює GUID за призначенням.
Guid.NewGuid()
створює порожній Guid
об’єкт, ініціалізує його за допомогою виклику CoCreateGuid
та повертає об’єкт.
new Guid()
просто створює порожній GUID (я думаю, всі нулі).
Я здогадуюсь, вони повинні були зробити конструктор загальнодоступним, як Guid
це є struct
.