Пусть у меня есть следующий класс:Как реализовать Multi-типа IComparable/IEquatable в C#
public sealed class ScaleValue :
IComparable, IComparable<ScaleValue>, IEquatable<ScaleValue>
{
public double Value
{ get; set;}
public string Definition
{ get; set;}
// interface methods
...
}
Если я хочу, чтобы мой класс сопоставим с double
я должен просто включить IComparable<double>
и реализовать его таким образом или мне нужно сделать это по-другому?
И когда я хочу, чтобы мой класс был сопоставим с парными, double.CompareTo
дает тот же результат, что и ScaleValue.CompareTo
?
и как насчет Equals
?
Я думаю, что я ввел свои обязанности в мой дизайн. Я думаю, что мой лучший вариант - сделать класс Scale с помощью метода ContainsValue(double Value)
. Таким образом, я могу найти ценность и сохранить обязанности там, где они нужны.
Проблема в том, что сопоставимая проверка больше не будет симметричной. someScaleValue.CompareTo (1.2) вернет значение, но '1.2.CompareTo (someScaleValue)' будет генерировать исключение, потому что версия сравнения «double» не будет знать, как обращаться с вашим типом. Это проблема. – Servy
У вас уже есть двойник, просто сравните это (помните принцип KISS) – Alex
Почему вы хотите, чтобы ваш класс был сопоставим с парными? Вы пытаетесь сделать статический метод? У вас уже есть IComparable. В методе Comparer вы можете сравнить член ScaleValue.Value. –