Posts Marcados value types

Interlúdio – Boxing

Pequena pausa na série. Programando hoje, apanhei tristemente de uma coisa ultra simples. Estava aprimorando o meu gerador de forms dinâmicos na parte de carga de dados do post. A partir dos parâmetros trazidos, ele preenche a instância do objeto desejado, salvando automaticamente se necessário.

Imaginem um objeto com uma prorpriedade value qualquer (Id p. ex, que é Int32). Como o dynamic form preenche cada propriedade por reflection, no final eu tenho sempre dois objetcs.  Algo tipo assim:

object oldValue = myOldObject.Id;
object newValue = myNewObject.Id;

Só que quando eu comparo (oldValue == newValue) ele retorna sempre false, mesmo que o Id seja o mesmo! Óbvio, por causa do boxing, no == ele compara as referências e aí como não é o mesmo objeto, sempre retorna false.  O que não foi tão óbvio foi como sair desta encrenca já que, em tese, eu deveria fazer o unboxing primeiro, só que como eu só tenho o type por reflection, isto não seria fácil.

Depois de perder quase meia hora e já pensando no pior, achei um post sobre o System.Object.Equal. Ele faz a comparação do conteúdo  e aí funciona para value types. Aí o código fica simplesmente:

System.Object.Equal(oldValue, newValue)

Simples, certo? Mas não óbvio e resolvi postar aqui pra facilitar a vida de outras pessoas que tenham a mesma dificuldade!

Até breve!

Hoje apanhei (pra variar) com uma coisa simples….  Todos devem conhecer o conceito de boxing e unboxing (se não vejam pra ontem!! rsrs), mas no caso de reflection, eu apanhei com algo bobo.
Imaginem um objeto com uma prorpriedade int (Id p. ex). Eu fiz um dynamic form para preencher automaticamente, só que como é por reflection, no final eu tenho dois objetcs.  Algo tipo assim:
object oldValue = myOldObject.Id;
object newValue = myNewObject.Id;
Só que quando eu comparo (oldValue == newValue) ele retorna sempre false, mesmo que o Id seja o mesmo! Óbvio, por causa do boxing, no == ele compara as referencias e aí como não é o mesmo objeto, sempre retorna false. ? O que não é óbvio era como sair desta encrenca já que

, , , , ,

Deixe um comentário