我正在用 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);
}
在函数“PerformOperation”中出现错误:“预期方法名称”。请帮助某人。
最佳答案
问题是您正在尝试使用裸 Delegate
类型就好像它是一个特定的委托(delegate)类型。如果您将字典更改为:
Dictionary<string, Func<decimal, double>>
然后该错误消失了 - 但您将无法添加 Func<decimal, decimal>
作为字典中的一个值,当然......或Func<decimal, decimal, decimal>
.
您可以使用 Delegate.DynamicInvoke
如果您不想将自己绑定(bind)到特定的委托(delegate)类型 - 但您仍然在处理您期待 double
的事实时遇到问题返回值但调用返回 decimal
的委托(delegate).如果你只是转换 DynamicInvoke
的结果,你会得到一个拆箱错误。至 double
.
还有一个问题是,您尝试调用的委托(delegate)可能有两个 参数,而您只提供了一个参数。
基本上,您需要使字典中的值更加一致。
关于c# - 委托(delegate) - 方法名称预期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18375292/