Я делаю расширение коллекции интервалов известной библиотеки C# C5. Интерфейс IInterval
определяет интервал с сопоставимыми конечными точками (удалены нерелевантные элементы):
public interface IInterval<T> where T : IComparable<T>
{
T Low { get; }
T High { get; }
}
В целом это хорошо работает, поскольку конечными точками интервала могут быть любые сопоставимые значения, такие как целые числа, даты или даже строки.
Однако иногда полезно иметь возможность рассчитать продолжительность интервала. Интервал [3:5)
имеет продолжительность 2, а интервал [1PM, 9PM)
имеет продолжительность 8 часов. Это невозможно с сопоставимыми, поскольку это дает нам только порядок элементов, а не их расстояние, например. трудно определить расстояние между двумя строками. Тип конечной точки в основном должен быть интервальными значениями.
Есть ли такой интерфейс, как IComparable<T>
, который позволяет мне сравнивать конечные точки в целом, а также делать такие вещи, как вычитание двух конечных точек, чтобы получить длительность, и добавление длительности к нижней конечной точке, чтобы получить верхнюю конечную точку, которую можно использовать для наследующего интерфейса? , IDurationInterval<T> : IInterval<T>
например?
Или, более кратко: есть ли интерфейс для интервальных значений?