BT

Novidades O InfoQ vem desenvolvendo uma série de novas funcionalidades para melhorar sua experiência com o site. Confira!

Fazendo o 0 ser igual a 0 no C#

| por Jonathan Allen Seguir 5 Seguidores , traduzido por Samuel Carrijo Seguir 0 Seguidores em 10 jun 2009. Tempo estimado de leitura: 1 minuto |

C# não funciona bem com valores boxed numéricos. Diferentemente do Visual Basic, os operadores de comparação numérica como o == não funcionam com tipos boxed, mesmo quando ambos os valores são do mesmo tipo.

Variável Tipo Valor
a int 0
b decimal 0.0
c decimal 0.0
boxA boxed int 0
boxB boxed decimal 0.0
boxC boxed decimal 0.0
dynA dynamic contendo um int 0
dynB dynamic contendo um decimal 0.0
dynC dynamic contendo um decimal 0.0

Comparação C# VB
a==b true true
b==a true true
b==c true true
a.Equals(b) false <--
b.Equals(c) true <--
boxA == boxB false true
boxB == boxA false true
boxB == boxC false true
boxA.Equals(boxB) false <--
boxB.Equals(boxC) true <--
dynA == dynB true n/a
dynB == dynA true n/a
dynB == dynC true n/a

Como você pode ver, o C# 3 e versões anteriores vão considerar como diferentes, inclusive valores boxed iguais e de mesmo tipo. Isto ocorre mesmo quando o método Equals da classe Decimal retornaria true.

Felizmente, com C# 4 esses problemas podem ser evitados. Se você transformar os valores boxed em dynamic antes, você obtém o resultado correto ao comparar tipos diferentes

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT