参数类型'System.Action'不能赋予参数类型'lambda expression'

时间:2013-06-18 22:11:09

标签: c# mvvm lambda mvvmcross

这个问题让我在过去几个小时内感到疯狂。

我写了两个与我写的相同属性的版本:

public IMvxCommand ButtonClickedCommand
{
    get
    {
        return new MvxCommand(() =>
            {
                Mvx.Resolve<IMvxWebBrowserTask>().ShowWebPage("http://google.com");
            });
    }
}

public IMvxCommand ButtonClickedCommand
{
    get
    {
        return new MvxCommand((Action) (() =>
            {
                Mvx.Resolve<IMvxWebBrowserTask>().ShowWebPage("http://google.com");
            }));
    }
}

这两种方法都是正确的,两种方法都是在点击按钮时运行,并且他们会做他们必须做的事情。但第一个告诉我这个:

第二个:

如果没有它的解决方案,而且它是某种错误我会删除它,但我正在处理的另一个项目,也是使用v3库,并且没有这样的问题。

卢卡斯

//修改

我想在这个问题上添加更多细节,这样可能有助于找到问题的原因。

如果我为自己创建的方法编写lambda表达式,那么lambda表达式通常没有问题。例如:

public void fun()
{
    fun2(() =>
             {
                 GetType();
             });
}

public void fun2(Action action)
{
}

上面的代码片段使用lambda表达式来表示所需的Action参数,因此情况与第一个代码段中的情况非常相似,但是没有问题。问题是,如果我将lambda表达式传递给MvxCommand对象的构造函数,我将不会显式地转换为Action。

1 个答案:

答案 0 :(得分:0)

我怀疑这与mvvmcrossmvvm

有什么关系

快速搜索此错误消息表明这更可能归结为工具 - 尤其是r# - 例如,请查看点击次数:

如果您正在运行任何扩展程序(如r#)并删除或禁用它们,则可能会删除警告。


如果禁用它们有帮助,那么我建议请求扩展供应商寻求支持。

如果禁用它们没有用,那么我建议调查两个项目之间存在/不存在问题的区别 - 这有望产生答案。