¿Cuál es la diferencia entre Guid.NewGuid()
y new Guid()
?
¿Cuál es el preferido?
¿Cuál es la diferencia entre Guid.NewGuid()
y new Guid()
?
¿Cuál es el preferido?
Respuestas:
new Guid()
hace un guid de "0" "vacío" (00000000-0000-0000-0000-000000000000 no es muy útil).
Guid.NewGuid()
hace un guid real con un valor único, lo que probablemente quieras.
new Guid()
es equivalente a Guid.Empty
.
Guid.NewGuid()
crea un nuevo UUID utilizando un algoritmo diseñado para hacer colisiones muy, muy poco probable.
new Guid()
crea un UUID que es todo ceros.
En general, preferiría el primero, porque ese es el objetivo de un UUID (a menos que, por supuesto, lo esté recibiendo de otro lugar).
Hay casos en los que realmente desea un UUID todo cero, pero en este caso Guid.Empty
o default(Guid)
es más claro acerca de su intención, 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 todos ceros y nulos.
Editar: 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 de cero creado es confuso, por lo que no es una buena idea de todos modos.
[Entiendo que este es un hilo viejo, solo agregando un poco más de detalle] Las dos respuestas de Mark y Jon Hanna resumen las diferencias, aunque puede interesarles algo que
Guid.NewGuid()
Eventualmente 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 todos los ceros. Esto también podría hacerse comparando el valor del Guid en cuestión con el nuevo Guid ()
Entonces, si necesita un identificador único , la respuesta es Guid.NewGuid ()
Guid.NewGuid()
, ya que crea GUID según lo previsto.
Guid.NewGuid()
crea un vacío Guid
objeto , lo inicializa llamandoCoCreateGuid
y devuelve el objeto.
new Guid()
simplemente crea un GUID vacío (todos ceros, creo).
Supongo que tuvieron que hacer público el constructor como Guid
es struct
.