Estou testando alguns serviços WCF que enviam objetos com Guids para frente e para trás. No código de teste do meu aplicativo da web, estou fazendo o seguinte:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
Por alguma razão, a chamada para o novo Guid () está gerando Guids com todos os 0 (zeros) como este:
00000000-0000-0000-0000-000000000000
O que poderia estar causando isso?
Guid.Empty
Respostas:
Use o método estático em
Guid.NewGuid()
vez de chamar o construtor padrão.fonte
Lições a aprender com isso:
1) Guid é um tipo de valor, não um tipo de referência.
2) Chamar o construtor padrão
new S()
em qualquer tipo de valor sempre devolve a forma totalmente zero desse tipo de valor, seja ele qual for. É logicamente o mesmo quedefault(S)
.fonte
default(S)
ou há alguma sutileza que estou faltando?const int x = new int();
não deveria ser legal de acordo com as especificações, masconst int x = default(int);
é; nós permitimos ambos.Tente isso:
Isso irá gerar um valor Guid 'real'. Quando você cria um tipo de referência, ele fornece o valor padrão (que, neste caso, são todos os zeros para um Guid).
Quando você cria um novo Guid, ele será inicializado com todos os zeros, que é o valor padrão para o Guid. É basicamente o mesmo que criar um "novo" int (que é um tipo de valor, mas você pode fazer isso de qualquer maneira):
Compare isso com a mesma coisa com um int:
fonte
g1
será compilado apenas como campo e não como variável local. Também os índices em sua coluna de comentário não corresponder-se com o mesmo linha do códigoTente fazer:
fonte
Não posso dizer quantas vezes isso ocorreu. mim.
fonte
No espírito de estar completo, as respostas que instruem você a usar
Guid.NewGuid()
estão corretas.Ao abordar sua edição subsequente, você precisará postar o código da sua
RequestObject
turma. Suspeito que sua propriedade guid não esteja marcada comoDataMember
e, portanto, não esteja sendo serializada por fio. Comodefault(Guid)
é o mesmo quenew Guid()
(ou seja, todos0
), isso explicaria o comportamento que você está vendo.fonte