C# 如何重载委托函数?

C# 如何重载委托函数?,c#,delegates,C#,Delegates,我为一个对数函数创建一个委托,然后将该委托输入到另一个函数中,用作另一个函数的参数。我希望对数函数能够与一个默认为logbase 10的参数或两个将logbase更改为第二个参数的值的参数一起使用 目前我有 Func<double, double, double> pow = (x, y) => Math.Pow(x, y); Func<double, double, double> log = (x, y) => Math.Log(x, y); Func&l

我为一个对数函数创建一个委托,然后将该委托输入到另一个函数中,用作另一个函数的参数。我希望对数函数能够与一个默认为logbase 10的参数或两个将logbase更改为第二个参数的值的参数一起使用

目前我有

Func<double, double, double> pow = (x, y) => Math.Pow(x, y);
Func<double, double, double> log = (x, y) => Math.Log(x, y);
Func<double, double> log = x => Math.Log(x, 10);
Func<double, double> ln = x => Math.Log(x, Math.E);

var target = new Interpreter()
  .SetFunction("pow", pow)
  .SetFunction("ln", ln)
  .SetFunction("log", log);
我明白我为什么会犯这个错误,这是非常直截了当的。但是我应该能够创建一个具有多个重载的委托函数,对吗?我的意思是这是2018年的c#。我必须有另一种方法来实现这一点

为了达到同样的目的,我还尝试了以下方法

Func<double, double?, double> log = (x, y) => Math.Log(x, y == null 
     || double.IsNaN(y.Value) 
     || (y > 0.0 - double.Epsilon && y < 0.0 + double.Epsilon)  ? 10 : y.Value);
Func log=(x,y)=>Math.log(x,y==null
||double.IsNaN(y值)
||(y>0.0-双ε&y<0.0+双ε)?10:y值);
但这只有在我为第二个参数显式定义null时才有效。我希望能够省略第二个参数,并将其默认为以10为基数


谢谢

方法重载基于方法名称。委托没有名称,您有变量名称这一事实与此无关。此外,
Func
Func
不同,泛型没有重载


所以不,即使是2018年,你也不能这么做,因为有很多好的理由。您需要创建一个自定义类,该类可以根据某些条件(当然可能是存在可选参数)在“重载”之间进行选择。

最好的解决方案是使用一个局部函数,为您的基函数提供一个可选参数

double log(double x, double y = 10.0) => Math.Log(x, y);

是否您真正想要的是泛型,而不是Delgates?解释器类已经相当糟糕了。它真正关心的是一个函数是接受1个参数还是2个参数。没有办法找到答案,因此没有办法做出正确的决定。SetFunction()还需要一个参数,
numberOfArguments
。现在你完全不在乎你必须把它命名为“log10”。
double log(double x, double y = 10.0) => Math.Log(x, y);