Qual é a diferença entre Guid.NewGuid()
e new Guid()
?
Qual é o preferido?
Qual é a diferença entre Guid.NewGuid()
e new Guid()
?
Qual é o preferido?
Respostas:
new Guid()
cria um guid all-0 "vazio" (00000000-0000-0000-0000-000000000000 não é muito útil).
Guid.NewGuid()
cria um guia real com um valor único, o que você provavelmente deseja.
new Guid()
é equivalente a Guid.Empty
.
Guid.NewGuid()
cria um novo UUID usando um algoritmo projetado para tornar as colisões muito, muito improváveis.
new Guid()
cria um UUID que é todo-zeros.
Geralmente você prefere o primeiro, porque esse é o objetivo de um UUID (a menos que você esteja recebendo de outro lugar, é claro).
Há casos em que você realmente deseja um UUID zero, mas nesse caso Guid.Empty
ou default(Guid)
é mais claro sobre sua intenção, e há menos chances de alguém lê-lo esperando que um valor exclusivo tenha sido criado.
No geral, new Guid()
isso não é útil devido a essa falta de clareza, mas não é possível ter um tipo de valor que não tenha um construtor sem parâmetros que retorne um valor com todos os zeros e nulos.
Edit: Na verdade, é possível ter um construtor sem parâmetros em um tipo de valor que não defina tudo como zero e nulo, mas você não pode fazê-lo em C #, e as regras sobre quando será chamado e quando haverá apenas ser uma estrutura totalmente zero criada é confusa, portanto não é uma boa ideia.
[Entendo que este é um tópico antigo, apenas adicionando mais alguns detalhes] As duas respostas de Mark e Jon Hanna resumem as diferenças, embora possa interessar a alguns que
Guid.NewGuid()
Eventualmente chama CoCreateGuid (uma chamada COM para Ole32) (referência aqui ) e o trabalho real é feito por UuidCreate .
Guid.Empty deve ser usado para verificar se um Guid contém todos os zeros. Isso também pode ser feito através da comparação do valor do Guid em questão com o novo Guid ()
Portanto, se você precisar de um identificador exclusivo , a resposta é Guid.NewGuid ()
Guid.NewGuid()
, pois cria GUIDs conforme o planejado.
Guid.NewGuid()
cria um Guid
objeto vazio , inicializa-o chamando CoCreateGuid
e retorna o objeto.
new Guid()
apenas cria um GUID vazio (todos os zeros, eu acho).
Eu acho que eles tiveram que tornar o construtor público como Guid
é um struct
.