您不能定义这样的约束,但是可以在运行时检查类型。但是,这不会帮助您进行计算。
如果要进行计算,则可以选择如下所示:
class Calculations<T, S> where S: Calculator<T>, new(){ Calculator<T> _calculator = new S(); public T Square(T a) { return _calculator.Multiply(a, a); }}abstract class Calculator<T>{ public abstract T Multiply(T a, T b);}class IntCalculator : Calculator<int>{ public override int Multiply(int a, int b) { return a * b; }}同样,定义
FloatCalculator和所需的任何操作。它的速度不是特别快,尽管比C#4.0
dynamic构造要快。
var calc = new Calculations<int, IntCalculator>();var result = calc.Square(10);
副作用是,只有在
Calculator传递给它的类型具有匹配的
Calculator<T>实现时,您才能实例化,因此不必进行运行时类型检查。
这基本上就是海尔斯伯格在本次采访中所指的话题。就我个人而言,我仍然希望看到某种基本类型:)


![是否存在针对“实数”类型的C#通用约束?[重复] 是否存在针对“实数”类型的C#通用约束?[重复]](http://www.mshxw.com/aiimages/31/470667.png)
