我在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"功能中出现错误:"预期的方法名称".请帮助别人.
问题是您尝试使用裸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.
还有一个问题是,您尝试调用的委托可能有两个参数,而您只提供一个参数.
基本上,您需要更加一致地了解字典中的值.