Estoy probando algunos servicios WCF que envían objetos con guías de un lado a otro. En mi código de prueba de aplicación web, estoy haciendo lo siguiente:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
Por alguna razón, la llamada a new Guid () está generando Guids con todos los 0 (ceros) como este:
00000000-0000-0000-0000-000000000000
¿Qué podría estar causando esto?
Guid.Empty
Respuestas:
Use el método estático en
Guid.NewGuid()
lugar de llamar al constructor predeterminado.fuente
Lecciones para aprender de esto:
1) Guid es un tipo de valor, no un tipo de referencia.
2) Llamar al constructor predeterminado
new S()
en cualquier tipo de valor siempre le devuelve la forma de cero de ese tipo de valor, sea cual sea. Es lógicamente lo mismo quedefault(S)
.fuente
default(S)
o hay alguna sutileza que me falta?const int x = new int();
no se supone que sea legal de acuerdo con la especificación, pero loconst int x = default(int);
es; permitimos ambos.Intenta esto en su lugar:
Esto generará un valor Guid 'real'. Cuando crea un tipo de referencia nuevo, le dará el valor predeterminado (que en este caso es todo ceros para un Guid).
Cuando crea un nuevo Guid, lo inicializará a todos los ceros, que es el valor predeterminado para Guid. Básicamente es lo mismo que crear un int "nuevo" (que es un tipo de valor pero puede hacerlo de todos modos):
Compare esto con hacer lo mismo con un int:
fuente
g1
solo se compilará como campo y no como variable local. También los índices en su columna de comentario no coinciden con la misma línea del códigoTrata de hacerlo:
fuente
No puedo decirte cuántas veces esto ha atrapado. yo.
fuente
En el espíritu de ser completo, las respuestas que le indican que use
Guid.NewGuid()
son correctas.Al abordar su edición posterior, deberá publicar el código para su
RequestObject
clase. Sospecho que su propiedad guid no está marcada como aDataMember
y, por lo tanto, no se está serializando por cable. Comodefault(Guid)
es igual anew Guid()
(es decir, todos0
), esto explicaría el comportamiento que está viendo.fuente