C#中是否有用于间隔缩放值的接口?

Mik*_*und 7 c# icomparable intervals c5

我正在制作名的C#库C5 的间隔集合扩展.该IInterval接口定义的间隔具有可比较的端点(不相干构件除去):

public interface IInterval<T> where T : IComparable<T>
{
    T Low { get; }
    T High { get; }
}
Run Code Online (Sandbox Code Playgroud)

这通常很有效,因为区间端点可以是任何可比较的整数,日期甚至字符串.

然而,有时能够计算间隔的持续时间是有利的.间隔[3:5)的持续时间为2,间隔[1PM, 9PM)的持续时间为8小时.这对于可比对象是不可能的,因为它只给出了元素的顺序,而不是它们的距离,例如,很难给出两个字符串之间的距离.端点类型基本上必须是间隔缩放值.

是否有类似的界面IComparable<T>,允许我一般比较端点,但也做一些事情,比如减去两个端点以获得持续时间,并为低端点添加持续时间以获得可用于继承接口的高端点,IDurationInterval<T> : IInterval<T>例如?

或者更简洁:是否有间隔缩放值的接口?

Nim*_*and 4

不存在这样的接口。有些语言(例如 Scala)对此类操作具有抽象,但 .NET 没有。另外,我发现 .NET 库设计者在添加抽象级别时相当保守:他们似乎更喜欢简单和具体而不是复杂和抽象。他们从未添加过这种抽象,大概是因为 .NET Framework 的任何库中都没有迫切需要它。此外,它是一种抽象,如果使用不当可能会导致大量开销。

然而,.NET 的类型系统中没有任何内容排除这样的接口。它需要两个类型参数而不是一个:一个用于实现类型,一个用于结果类型。最基本的界面可能如下所示:

interface IAlgebraic<T, R> {
  T Add(R value)
  R Subtract(T value)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,无法将此接口添加到现有类型中,例如 Int32 和 DateTime。IComparable<T>对于这些类型,您需要s的推论Comparer<T>

interface IAlgebraicOps<T, R> {
  T Add(T x, R y)
  R Subtract(T x, T y)
}
Run Code Online (Sandbox Code Playgroud)