Je surcharge la méthode Egalité pour la comparaison de valeurs et je me demandais s'il existait un moyen propre de renvoyer false
dès que l'une des comparaisons de valeur retourne false. Par exemple, voici l'idée de base:Renvoie une variable dès qu'elle est définie sur une certaine valeur. Egalité de surcharge
public class MyClass
{
private int _valOne;
private int _valTwo;
private int _valThree;
public MyClass(int valOne, int valTwo, int valThree)
{
_valOne = valOne;
_valTwo = valTwo;
_valThree = valThree;
}
public override bool Equals(object obj)
{
// If the object is null return false
if (obj == null)
{
return false;
}
// If the object is not of MyClass type return false
MyClass myClass = obj as MyClass;
if (myClass == null)
{
return false;
}
// Now compare all the field values
bool areEqual = false;
areEqual = (this._valOne == myClass._valOne);
areEqual = (this._valTwo == myClass._valTwo);
areEqual = (this._valThree == myClass._valThree);
return areEqual;
}
}
Dites les _valOne
« s ne sont pas égaux. Le moyen le plus efficace de comparer est de retourner false
dès que l'on sait que deux valeurs ne sont pas égales. Quelque chose comme ce qui suit ...
// Now compare all the field values
bool areEqual = false;
areEqual = (this._valOne == myClass._valOne);
if (!areEqual)
{
return false;
}
areEqual = (this._valTwo == myClass._valTwo);
if (!areEqual)
{
return false;
}
areEqual = (this._valThree == myClass._valThree);
return areEqual;
Alors maintenant, après la comparaison des _valOne
s pas plus de comparaisons de valeur sont faites. Cela semble très répétitif, maladroit, et (surtout) horrible pour la lisibilité. Je veux savoir s'il y a moyen de réduire ce code de la même manière sans utiliser l'opérateur & &.
J'ai pensé à faire ça mais avec plusieurs champs je pensais que ça pourrait devenir incontrôlable. Je me rends compte que cela fonctionnera et peut-être la seule solution à ce problème, mais y a-t-il un autre moyen d'y penser? – 7ogan
La seule autre manière est l'autre réponse de Raze2Dust, de "passer au travers" manuellement chaque condition et de revenir dès que l'on revient faux. L'opérateur && fait quelque chose de très similaire avec le comportement court-circuité des opérateurs logiques C#. – KeithS