Saltar al contenido

¿Guid es todo 0 (ceros)?

Solución:

Usa el método estático Guid.NewGuid() en lugar de llamar al constructor predeterminado.

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = Guid.NewGuid()
});

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 todo cero de ese tipo de valor, sea lo que sea. Lógicamente es lo mismo que default(S).

Prueba esto en su lugar:

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = new Guid.NewGuid()
});

Esto generará un valor Guid “real”. Cuando nuevo un tipo de referencia, le dará el valor predeterminado (que en este caso, son todos ceros para un Guid).

Cuando crea un nuevo Guid, lo inicializará a todos los ceros, que es el valor predeterminado para Guid. Es básicamente lo mismo que crear un “nuevo” int (que es un tipo de valor, pero puede hacerlo de todos modos):

Guid g1;                    // g1 is 00000000-0000-0000-0000-000000000000
Guid g2 = new Guid();       // g2 is 00000000-0000-0000-0000-000000000000
Guid g3 = default(Guid);    // g3 is 00000000-0000-0000-0000-000000000000
Guid g4 = Guid.NewGuid();   // g4 is not all zeroes

Compare esto con hacer lo mismo con un int:

int i1;                     // i1 is 0
int i2 = new int();         // i2 is 0
int i3 = default(int);      // i3 is 0
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *