Pour la vie de ma personne, je n'arrive pas à faire en sorte que ma liaison WPF fonctionne correctement pour la propriété SelectedItem
de RibbonComboBox
.Equals override vs. IEquatable <>
Puis j'ai commencé à lire sur la façon dont .NET compare les éléments. Ma compréhension est que, dans certains cas, il compare le pointeur réel. Dans ce cas, charger une valeur nouvelle et égale à partir d'une base de données, par exemple, il peut ne pas être considéré comme égal. Alors j'ai commencé à chercher explicitement à mettre en œuvre Equals
pour mon type. Cependant, cela semble un peu confus car il y a au moins deux versions différentes que je peux mettre en œuvre.
Le code ci-dessous montre que je peux soit surcharger object.Equals
, soit implémenter IEquatable<>
. En fait, le code ci-dessous implémente les deux, et les tests indiquent que sont tous les deux appelés.
public class TextValuePair : IEquatable<TextValuePair>
{
public string Text { get; set; }
public int Value { get; set; }
public override bool Equals(object obj)
{
if (obj == null || !(obj is TextValuePair))
return false;
return Value == (obj as TextValuePair).Value;
}
public override int GetHashCode()
{
return Value;
}
public bool Equals(TextValuePair obj)
{
Debug.Assert(obj != null);
if (obj == null)
return false;
return Value == obj.Value;
}
}
Quelqu'un peut-il me aider à comprendre ce qui est nécessaire pour éviter mes objets d'être comparé à l'équivalence par les routines de la bibliothèque .NET en fonction de pointeurs ayant la même valeur? Est-il vraiment nécessaire d'implémenter les deux versions de Equals
?
Il existe de nombreuses façons possibles d'implémenter 'Equals', mais pourquoi ne choisissez-vous pas simplement' override Equals', car il sera toujours utilisé. Cela ne fonctionne-t-il pas dans votre cas? – meJustAndrew
@meJustAndrew: Ma liaison a toujours des problèmes mais cela n'est probablement pas lié à ce stade. Puisque les deux versions de 'Equals' sont appelées, comment puis-je savoir que le remplacement est suffisant et sera toujours utilisé? Deux versions étant appelées sorte de feuilles je ne sais pas quand chacune sera appelée. –
Voir: http://stackoverflow.com/questions/2734914/whats-the-difference-between-iequatable-and-just-overriding-object-equals – Arno