委托 - 方法名称预期错误

Dim*_*ima 3 c# delegates

我在c#上写一个控制台计算器.我需要以下代码开始工作:

Dictionary<string, Delegate> functions = new Dictionary<string, Delegate>();

private void AddMyFunction (Delegate d, string name)
{
    if (name == null)
    {
        name = d.Method.Name;
    }
    functions.Add (name, d);
}

public void AddFunction (Func<decimal, decimal> f, string name)
{
    AddMyFunction (f, name);
}

public void AddFunction (Func<decimal, decimal, decimal> f, string name)
{
    AddMyFunction (f, name);
}        

public double PerformOperation (string op, decimal x)
{
    return functions [ op ] (x);
}    
Run Code Online (Sandbox Code Playgroud)

在"PerformOperation"功能中出现错误:"预期的方法名称".请帮助别人.

Jon*_*eet 5

问题是您尝试使用裸Delegate类型,就好像它是特定的委托类型一样.如果您将字典更改为:

Dictionary<string, Func<decimal, double>>
Run Code Online (Sandbox Code Playgroud)

然后那个错误消失了 - 但你无法Func<decimal, decimal>在字典中添加一个值,当然......或者a Func<decimal, decimal, decimal>.

你可以使用,Delegate.DynamicInvoke如果你不想将自己绑定到特定的委托类型 - 但是你仍然有一个问题,即你需要一个double返回值,但是调用一个返回一个委托的委托decimal.如果只是将结果转换为DynamicInvoke,则会出现取消装箱错误double.

还有一个问题是,您尝试调用的委托可能有两个参数,而您只提供一个参数.

基本上,您需要更加一致地了解字典中的值.