首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中是否存在间隔缩放值的接口?

问在C#中是否存在间隔缩放值的接口?
EN

Stack Overflow用户
提问于 2015-07-16 05:00:17
回答 1查看 291关注 0票数 7

我在制作著名的区间集合扩展图书馆C5。IInterval接口定义了一个具有可比较端点的间隔(不相关的成员被删除):

代码语言:javascript
复制
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> )的高端点?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-19 11:46:08

不存在这样的接口。有些语言,比如Scala,对这类操作有抽象,但是.NET没有。此外,我发现.NET库设计人员在添加抽象级别时相当保守:与复杂和抽象相比,他们更喜欢简单和具体的抽象。他们从来没有添加过这种抽象,大概是因为在.NET框架的任何一个库中都从来没有对它有迫切的需求。而且,它是一种抽象,如果使用不当,会造成大量开销。

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

代码语言:javascript
复制
interface IAlgebraic<T, R> {
  T Add(R value)
  R Subtract(T value)
}

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

代码语言:javascript
复制
interface IAlgebraicOps<T, R> {
  T Add(T x, R y)
  R Subtract(T x, T y)
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31445653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档