Какая разница между 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 ().
Итак, если вам нужен уникальный идентификатор , ответ будет Guid.NewGuid ()
Guid.NewGuid()
, поскольку он создает GUID, как и предполагалось.
Guid.NewGuid()
создает пустой Guid
объект, инициализирует его путем вызова CoCreateGuid
и возвращает объект.
new Guid()
просто создает пустой GUID (я думаю, все нули).
Я предполагаю, что они должны были сделать конструктор публичным как Guid
есть struct
.