C# différence entre == et Equals()

J'ai une condition dans une application silverlight qui compare 2 chaînes, pour quelque raison que quand j'utilise == il retourne faux tout .Equals() retourne vrai.

Voici le code:

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content.Equals("Energy Attack"))
{
    //Execute code
}

if (((ListBoxItem)lstBaseMenu.SelectedItem).Content == "Energy Attack")
{
    //Execute code
}

Aucune raison pour expliquer pourquoi ce qui se passe?

  • Voir aussi: stackoverflow.com/questions/144530/or-equals
  • Chaîne remplace ==, mais les opérateurs ne sont pas polymorphes. Dans ce code, le == opérateur est appelé sur un type object, qui effectue une identité comparaison au lieu d'une valeur.
  • Pour développer sur @DrewNoakes commentaire: Le compilateur choisit un == surcharge basée sur le type de compilation des opérandes. Le Content propriété est object. Les opérateurs ne sont pas virtuels, de sorte que le défaut de mise en œuvre de == est appelé, en donnant une référence de comparaison d'égalité. Avec égal à Égal, l'appel à la méthode virtuelle object.Equals(object); string remplace cette méthode et effectue une comparaison ordinale sur la chaîne de contenu. Voir msdn.microsoft.com/en-us/library/fkfd9eh8(v=vs. 110).aspx et referencesource.microsoft.com/#mscorlib/system/string.cs,507.
  • l'explication est précis. Il convient de noter que lorsque la gauche de == a le type de compilation object et le côté droit est le type de compilation string, alors le compilateur C# devez choisir le (problématique, dans ce cas) surcharge operator ==(object, object); mais il va question au moment de la compilation d'avertissement qu'il pourrait être involontaire. Lisez donc le moment de la compilation des avertissements! Pour résoudre le problème et toujours utiliser ==, la fonte de la gauche à string. Si je me souviens bien, le texte de l'avertissement suggère juste que.
  • pour les conseils de lire les avertissements du compilateur. Encore mieux: activer les avertissements comme des erreurs option pour forcer tout le monde à prêter attention à eux.
InformationsquelleAutor Drahcir | 2009-05-02