Guid.NewGuid() frente a nuevo Guid()
¿ Cuál es la diferencia entre Guid.NewGuid()
y new Guid()
?
¿Cuál es el preferido?
new Guid()
crea un guid todo 0 "vacío" (00000000-0000-0000-0000-000000000000 no es muy útil).
Guid.NewGuid()
crea una guía real con un valor único, lo que probablemente quieras.
Guid.NewGuid()
crea un nuevo UUID utilizando un algoritmo diseñado para hacer que las colisiones sean muy, muy improbables.
new Guid()
crea un UUID que es todo ceros.
Generalmente preferirías lo primero, porque ese es el objetivo de un UUID (a menos que lo recibas de otro lugar, por supuesto).
Hay casos en los que realmente desea un UUID de ceros, pero en este caso su intención Guid.Empty
es default(Guid)
más clara y hay menos posibilidades de que alguien lo lea esperando que se haya creado un valor único.
En general, new Guid()
no es tan útil debido a esta falta de claridad, pero no es posible tener un tipo de valor que no tenga un constructor sin parámetros que devuelva un valor de ceros y nulos.
Editar: En realidad, es posible tener un constructor sin parámetros en un tipo de valor que no establezca todo en cero y nulo, pero no puedes hacerlo en C#, y las reglas sobre cuándo se llamará y cuándo habrá Ser simplemente una estructura de ceros creada es confuso, por lo que de todos modos no es una buena idea.
[Entiendo que este es un hilo antiguo, solo agrego más detalles] Las dos respuestas de Mark y Jon Hanna resumen las diferencias, aunque puede interesar a algunos.
Guid.NewGuid()
Finalmente llama a CoCreateGuid (una llamada COM a Ole32) (referencia aquí ) y el trabajo real lo realiza UuidCreate .
Guid.Empty está destinado a usarse para verificar si un Guid contiene solo ceros. Esto también se podría hacer comparando el valor del Guid en cuestión con el nuevo Guid()
Entonces, si necesita un identificador único , la respuesta es Guid.NewGuid()