SIGN (==) Operador em C#: Quando ele falha e como lidar com
] O operador == em
c# é muito conveniente para comparar a igualdade de dois objetos. Embora o operador ==
seja geralmente considerado para funcionar com todos os tipos, é inutilizável em alguns casos.
Um exemplo é comparar tipos genéricos irrestritos. O snippet de código fornecido na pergunta bool compare
não pode ser compilado porque tenta comparar dois parâmetros genéricos do tipo T. Se não houver restrições em t, o tipo pode ser um tipo de valor; nesse caso, o operador ==
não pode ser aplicado diretamente.
Por exemplo, o int
e float
float os operadores não são predefinidos
. Eles usam o método é igual a
para comparação de valor. Por outro lado, tipos de referência como string
têm operadores predefinidos ==
para verificar referências de objeto.
SO, sem especificar restrições em t, o compilador não pode determinar se deve usar o operador ==
predefinido para o tipo de referência ou o método é igual a
do tipo de valor. Para resolver isso, T deve ser restringido a um tipo de referência.
agora, suponha que você consulte o tipo como um parâmetro de tipo. Nesse caso, o operador ==
comparará usando referências predefinidas, em vez de qualquer versão sobrecarregada do operador. Isso ocorre porque as comparações de citação predefinida são consideradas mais básicas e confiáveis.
Se você não tiver informações insuficientes sobre os parâmetros de tipo, poderá usar a interface iEqualityComparer
ou o EqualityComparer
Método estático. Esses métodos fornecem uma maneira padronizada de comparar a igualdade do objeto, independentemente do seu tipo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3