Eu tenho uma condição em um aplicativo silverlight que compara duas strings, por algum motivo, quando eu o uso ==, retorna false enquanto .Equals()retorna true .
Aqui está o código:
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
// Execute code
}
if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
// Execute code
}
Alguma razão para isso estar acontecendo?
==, mas os operadores não são polimórficos. Nesse código, o ==operador é chamado no tipo object, que faz uma comparação de identidade em vez de um valor um.
==sobrecarga com base no tipo de tempo de compilação dos operandos. A Contentpropriedade é object. Os operadores não são virtuais, portanto, a implementação padrão de ==é chamada, fornecendo uma comparação de igualdade de referência. Com Igual, a chamada vai para o método virtual object.Equals(object); stringsubstitui esse método e executa uma comparação ordinal no conteúdo da string. Consulte msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs.110).aspx e referenceource.microsoft.com/#mscorlib/system/string.cs.507 .
==tem tempo de compilação objecte o lado direito string, o tipo do tempo de compilação , o compilador C # deve selecionar a sobrecarga (problemática, neste caso) operator ==(object, object); mas vai emitir um aviso de tempo de compilação que poderia ser não intencional. Então leia os avisos em tempo de compilação! Para corrigir o problema e ainda usar ==, gire o lado esquerdo para string. Se bem me lembro, o texto de aviso sugere exatamente isso.
