lambda表达式的编译器错误

时间:2016-08-30 11:07:18

标签: c#

public ICommand ChangeLangCommand => new DelegateCommand(this.ChangeLangClick);

我收到此编译器错误,标记在=>箭头上:

Error   1   ; expected

我是否以某种方式使用了错误的编译器版本?我怎么检查这个?

1 个答案:

答案 0 :(得分:1)

这是一个名为 expression bodied property

C# 6.0功能
public ICommand ChangeLangCommand => new DelegateCommand(this.ChangeLangClick);

您可以升级编译器(安装最新版本的VS2015)或不使用它,因为它等同于仅具有getter的属性:

public ICommand ChangeLangCommand
{
    get
    {
        return new DelegateCommand(this.ChangeLangClick);
    }
}

我有一种感觉,每次访问属性时创建命令的新实例是错误的,正确的代码可能/将是

public ICommand ChangeLangCommand { get; }

// in constructor
ChangeLangCommand = new DelegateCommand(this.ChangeLangClick);

我认为这也是一个新功能(从构造函数初始化getter-only属性),如果这是真的,那么你可以使用较旧的语法:

ICommand _changeLangCommand;
public ICommand ChangeLangCommand
{
    get
    {
        return _changeLangCommand;
    }
}

// in constructor
_changeLangCommand = new DelegateCommand(this.ChangeLangClick);