Guid.NewGuid() frente a nuevo Guid()

Resuelto OscarRyz asked hace 12 años • 5 respuestas

¿ Cuál es la diferencia entre Guid.NewGuid()y new Guid()?

¿Cuál es el preferido?

OscarRyz avatar Aug 13 '12 23:08 OscarRyz
Aceptado

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.

MarkPflug avatar Aug 13 '2012 16:08 MarkPflug

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.Emptyes 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.

Jon Hanna avatar Aug 13 '2012 16:08 Jon Hanna

[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()

Sudhanshu Mishra avatar Apr 08 '2014 06:04 Sudhanshu Mishra