newguid new net generate c# guid

c# - net - Guid.NewGuid() vs. nuevo Guid()



string to guid c# (4)

[Entiendo que este es un hilo antiguo, solo que agregué algunos detalles más] Las dos respuestas de Mark y Jon Hanna resumen las diferencias, aunque puede interesar a algunos que

Guid.NewGuid()

Finalmente, se llama CoCreateGuid (una llamada COM a Ole32) (consulte here ) y UuidCreate realiza el trabajo real.

Guid.Empty está destinado a ser usado para verificar si un Guid contiene todos los ceros. Esto también podría hacerse comparando el valor del Guid en cuestión con el nuevo Guid ()

Por lo tanto, si necesita un identificador único , la respuesta es Guid.NewGuid ()

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

¿Cuál es el preferido?


Guid.NewGuid() , ya que crea GUID según lo previsto.

Guid.NewGuid() crea un objeto Guid vacío, lo inicializa llamando a CoCreateGuid y devuelve el objeto.

new Guid() simplemente crea un GUID vacío (todos ceros, creo).

Supongo que tuvieron que hacer público al constructor ya que Guid es una struct .


Guid.NewGuid() crea un nuevo UUID utilizando un algoritmo que está diseñado para hacer colisiones muy, muy poco probable.

new Guid() crea un UUID que es todo ceros.

En general, preferirías lo primero, porque ese es el punto de un UUID (a menos que lo estés recibiendo de otro lugar, por supuesto).

Hay casos en los que realmente desea un UUID de cero, pero en este caso Guid.Empty o default(Guid) es más claro sobre su intención, y hay menos posibilidades de que alguien que lo lea espere que se haya creado un valor único.

En general, el 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 todos los ceros y nulos.

Edición: en realidad, es posible tener un constructor sin parámetros en un tipo de valor que no establece todo en cero y nulo, pero no puede hacerlo en C #, y las reglas sobre cuándo se llamará y cuándo habrá solo ser una estructura todo-cero creada es confusa, por lo que no es una buena idea de todos modos.


new Guid() crea un guid "0" vacío (00000000-0000-0000-0000-000000000000 no es muy útil).

Guid.NewGuid() un guid real con un valor único, lo que probablemente desee.