在.NET中是否存在类似IOperable<T>的通用运算接口?
关于.NET中IOperable接口的问题
首先直接给你答案:.NET框架和类库中并没有内置你描述的IOperable<T>接口。
不过你想要的这种对泛型数值类型进行统一运算的能力,在.NET 7及以后的版本里,已经通过System.Numerics命名空间下的一系列接口实现了,最核心的就是INumber<T>接口。它定义了加减乘除等基础运算方法,比如:
T Add(T left, T right)T Subtract(T left, T right)T Multiply(T left, T right)T Divide(T left, T right)
而且所有的基元数值类型(int、float、decimal等)都实现了这些接口,自定义的数值类型也可以实现INumber<T>来获得统一的运算能力。
回到你说的Interval<T>场景,只要约束T实现INumber<T>,就可以直接用End.Subtract(Start)来计算区间长度,代码大概是这样:
public class Interval<T> where T : INumber<T> { public T Start { get; set; } public T End { get; set; } public T Length => End.Subtract(Start); }
如果是在.NET 7之前的版本,那确实没有官方的统一接口,这时候你可能需要自己定义类似IOperable<T>这样的接口,然后让需要支持运算的类型去实现它,就像你一开始设想的那样。
内容的提问来源于stack exchange,提问作者DrkDeveloper
相关产品推荐
相关产品推荐

