C#中的通用因子函数

mqp*_*sta 4 c# generics

我想编写一个通用函数来计算C#中的factorial ...像:

 static T Factorial<T>(T n)
        {
            if (n <= 1)
                return 1;

            return Factorial<T>(n - 1);
        }
Run Code Online (Sandbox Code Playgroud)

但显然有限制我们不能对类型' T' 执行操作.任何替代?

Nic*_*ick 7

问题是泛型不支持运算符,因为它们是静态方法,而不是接口的一部分.但是,您可以使用Generic Operators,它可以在Miscellaneous Utility Library中找到.


Kel*_*tex 5

您需要添加一个执行乘法的委托参数.像这样的东西

delegate T Multiply<T>(T a, T b);
Run Code Online (Sandbox Code Playgroud)

那么你的函数将被定义如下:

static T Factorial<T>(T n, Multiply func)
{
    ... your code here
}
Run Code Online (Sandbox Code Playgroud)

因此,当调用您的阶乘函数时,调用者将传递乘法函数:

int x = Factorial<int>(5, (a,b) => a * b);
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考您可能需要传入额外的委托函数/值来处理"1"案例. (3认同)
  • 这确实完成了工作,但随后又延伸了"因子"的定义.它也可以称为"DoRecursiveOperation".毕竟,我可以合法地称之为'Factorial <int>(5,(a,b)=> b - a)`而且我得到的东西根本不是因子的结果. (2认同)