C# 中是否有用于区间标度值的接口?

Is there an interface in C# for interval-scaled values?

我正在制作 an interval collection extension of the famous C# library C5IInterval 接口定义了一个具有可比端点的区间(不相关的成员已删除):

public interface IInterval<T> where T : IComparable<T>
{
    T Low { get; }
    T High { get; }
}

这在一般情况下效果很好,因为区间端点可以是任何可比较的东西,如整数、日期,甚至字符串。

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

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

或者更简洁:是否有用于区间标度值的接口?

不存在这样的界面。有些语言,如 Scala,对这些类型的操作进行了抽象,但 .NET 有 none。此外,我发现 .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)
}