有没有人知道下面的代码是什么问题,无法在VS2013中编译?
GenericCommand.AddHandlerFactory("MyKey", (cmd, action) =>
{
return (command) =>
{
var result = new SuccessResult() { ResultText = "some example text" };
result.Send(command.Configuration);
};
});
AddHandlerFactory的原型是:
public static void AddHandlerFactory(string key, Func<GenericCommand, Action> handlerFactory)
在VS2013中编译时,显示
无法在此范围内声明名为command的局部变量 因为它会给命令带来不同的意义...... ....
和
委托System.Func WindowsPhoneTestFramework.Client.AutomationClient.Remote.GenericCommand, System.Action不带2个参数
错误消息是:
无法将lambda表达式转换为委托类型Delegate System.Func WindowsPhoneTestFramework.Client.AutomationClient.Remote.GenericCommand, System.Action,因为块中的某些返回类型不是 隐式转换为委托返回类型。
答案 0 :(得分:3)
您有两个共享相同名称的参数:
(command, action) =>
是一个带有参数的command
return (command) =>
是另一个行动,另一个参数被command
所以你必须重命名两个参数名称中的一个。
正如@Dirk所解释的那样,您返回的是Action<T>
而不是Action
。所以你可以试试这个:
GenericCommand.AddHandlerFactory("MyKey", (cmd, action) =>
{
return () =>
{
var result = new SuccessResult() { ResultText = "some example text" };
result.Send(cmd.Configuration);
};
});