Possible Duplicates:
C# generic constraint for only integers
Generics - where T is a number?
在 C# 中:
想象这样一种情况,我们有一个泛型类型的功能,在这种情况下,我们的泛型类型在概念上仅限于数字。
通过说“数字”,我们旨在能够对类型 T 的变量使用乘法、加法、减法等运算符。
不幸的是,C# 不接受这样的事情:
public class Image<T> where T : number
请注意,性能也很重要,因此我们不想重新定义数字类型的结构并使用它们。
您认为最好的方法是什么?或者是否有任何设计模式允许我们对通用类型的变量具有“高性能”算术函数?
以失去可读性为代价,你可以重写所有的方法
int Factorial(int x)
{
if (x == 0) return 1;
return x * Factorial(x - 1);
}
到
T Factorial<T>(IReal<T> t, T x)
{
if (t.Equals(x, t.FromInteger(0))) return t.FromInteger(1);
return t.Multiply(x, Factorial<T>(t, t.Subtract(x, t.FromInteger(1))));
}
使用
interface IEq<T>
{
bool Equals(T a, T b);
}
interface IOrd<T> : IEq<T>
{
int Compare(T a, T b);
}
interface IShow<T>
{
string Show(T a);
}
interface INum<T> : IEq<T>, IShow<T>
{
T Add(T a, T b);
T Subtract(T a, T b);
T Multiply(T a, T b);
T Negate(T a);
T Abs(T a);
T Signum(T a);
T FromInteger(int x);
}
interface IReal<T> : INum<T>, IOrd<T>
{
}
具有任何数字类型的实现。