Je vois un comportement différent entre l'utilisation de .Equals et == entre deux nouvelles instances Tuple <> de .NET 4.0. Si j'ai remplacé Equals sur l'objet dans le Tuple <> et appelez .Equals sur les Tuples, le remplacement de Equals sera appelé. Si j'utilise == sur les Tuples, le remplacement de Equals n'est pas appelé. Est-ce par conception et cela a-t-il un sens?Est-ce un comportement d'égalité Tuple C# 4.0 attendu?
EDIT: De réponses et de commentaires Je peux dire que je ne suis pas clair. Je sais que Tuple <> est un type de référence et que pour les types de référence == vérifiera l'identité (ReferenceEquals). Mais, est-ce que Tuple <> override == pour vérifier l'égalité des objets qu'il contient? Pour la cohérence, probablement pas.
Par exemple, si j'ai un simple objet
public class NameAndNumber
{
public int Number { get; set; }
public string Name { get; set; }
public override bool Equals(object obj)
{
if (obj is NameAndNumber)
{
NameAndNumber other = (NameAndNumber)obj;
return Number == other.Number && Name == other.Name;
}
return false;
}
}
puis-je faire quelque chose comme ceci:
Tuple<NameAndNumber, NameAndNumber> left = new Tuple<NameAndNumber, NameAndNumber>(
new NameAndNumber { Name = "one", Number = 1 },
new NameAndNumber { Name = "two", Number = 2 });
Tuple<NameAndNumber, NameAndNumber> right = new Tuple<NameAndNumber, NameAndNumber>(
new NameAndNumber { Name = "one", Number = 1 },
new NameAndNumber { Name = "two", Number = 2 });
bool operatorResult = left == right;
bool equalsResult = left.Equals(right);
Console.Out.WriteLine("operatorResult = {0} equalsResult = {1}",
operatorResult, equalsResult);
Je reçois operatorResult = false equalsResult = true
Dois-je me attend cette?
Je sais que l'implémentation de Equals sur NameAndNumber n'est pas "correcte" mais simplement un exemple de code simplifié.
J'ai également essayé d'implémenter IEquatable, ==,! =, Et GetHashCode. Mêmes résultats
Merci pour les réponses et les commentaires. J'aurais dû m'attendre à ce comportement. Je remplace nos projets 3.5 implémentation de Tuple nous nous sommes écrit avec l'implémentation de .NET 4. Notre Tuple a dépassé == pour obtenir le comportement que j'attendais dans la question. J'ai donc été surpris quand il ne se comportait pas exactement comme notre coutume. –