C#中是否有一个用于间隔的接口?

我正在对着名的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>

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


没有这样的接口存在。 一些语言,比如Scala,对这些操作有抽象,但.NET没有。 另外,我发现.NET库设计师在添加抽象层次时相当保守:看起来他们倾向于比复杂和抽象更简单和具体。 他们从来没有添加过这种抽象概念,因为在.NET Framework的任何库中都没有迫切需要它。 而且,如果使用不当,这是一种抽象,可能会导致大量开销。

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

interface IAlgebraic<T, R> {
  T Add(R value)
  R Subtract(T value)
}

不幸的是,没有办法将此接口添加到现有类型,如Int32和DateTime。 对于这些类型,您需要IComparable<T>Comparer<T>的必然结果。

interface IAlgebraicOps<T, R> {
  T Add(T x, R y)
  R Subtract(T x, T y)
}
链接地址: http://www.djcxy.com/p/86653.html

上一篇: Is there an interface in C# for interval

下一篇: Is there a way to git gc / prune on a remote Git repository hosted by TFS 2013?