Disons que je la classe suivante:Comment mettre en œuvre multi type IComparable/IEquatable en C#
public sealed class ScaleValue :
IComparable, IComparable<ScaleValue>, IEquatable<ScaleValue>
{
public double Value
{ get; set;}
public string Definition
{ get; set;}
// interface methods
...
}
Si je veux faire ma classe comparable à un double
dois-je inclure simplement IComparable<double>
et mettre en œuvre cette façon ou dois-je le faire d'une autre manière?
Et quand je veux que ma classe soit comparable aux doubles devrait le double.CompareTo
donner le même résultat que le ScaleValue.CompareTo
?
et que diriez-vous de Equals
? Je pense que j'ai mis les responsabilités mal dans ma conception. Je pense que ma meilleure option est de faire une classe Scale avec une méthode ContainsValue(double Value)
. De cette façon, je peux rechercher la valeur et garder les responsabilités là où elles sont nécessaires.
Le problème ici est qu'un contrôle comparable ne sera plus symétrique. someScaleValue.CompareTo (1.2) retournera une valeur, mais '1.2.CompareTo (someScaleValue)' lèvera une exception, car la version '' double'' de la comparabilité ne saura pas comment gérer votre type. C'est un problème. – Servy
Vous avez déjà un double ici, comparez simplement cela (rappelez-vous le principe KISS) – Alex
Pourquoi voudriez-vous que votre classe soit comparable aux doubles? Essayez-vous de faire une méthode statique? Vous avez déjà implémenté IComparable. Dans la méthode Comparer, vous pouvez comparer le membre ScaleValue.Value .. –