<分区>
我正在编写一个类,该类对 C# 中的每个原始数字类型执行基本相同类型的计算。尽管实际计算更为复杂,但可以将其视为一种计算多个值的平均值的方法,例如
class Calc
{
public int Count { get; private set; }
public int Total { get; private set; }
public int Average { get { return Count / Total; } }
public int AddDataPoint(int data)
{
Total += data;
Count++;
}
}
现在为了支持对 double、float 以及可能定义运算符 + 和运算符/的其他类的相同操作,我的第一个想法是简单地使用泛型:
class Calc<T>
{
public T Count { get; private set; }
public T Total { get; private set; }
public T Average { get { return Count / Total; } }
public T AddDataPoint(T data)
{
Total += data;
Count++;
}
}
遗憾的是,C# 无法确定 T 是否支持运算符 + 和/,因此无法编译上述代码段。我的下一个想法是将 T 限制为支持这些运算符的类型,但我的初步研究表明这是不可能的。
当然可以将我想要支持的每种类型封装在一个实现自定义接口(interface)的类中,例如IMath 并将 T 限制为那个,但这段代码将被调用很多次,我想避免装箱开销。
有没有一种优雅高效的方法来解决这个问题而不重复代码?