Sun*_*ita 4 c# .net-4.5 visual-studio-2017
我使用的是.NET Framework 4.5.2,VS2017.VS2017获得了getter和setter的新语法.现在具有getter setter的属性如下所示:
public string Name { get => _name; set => _name = value; }
Run Code Online (Sandbox Code Playgroud)
我必须写下面的属性.如何用lambda表达式set =>编写setter?
public int EmployeeNumber
{
get => _employeeNumber;
set { _employeeNumber = value; OnPropertyChanged("EmployeeNumber");}
}
Run Code Online (Sandbox Code Playgroud)
比如这样的事情:
public int EmployeeNumber
{
get => _employeeNumber;
set =>{ _employeeNumber = value;OnPropertyChanged("EmployeeNumber"); }
}
Run Code Online (Sandbox Code Playgroud)
对于上面的setter,我得到3个错误:
CS1525: Invalid expression term {
CS1002: ; expected
CS1014: A get or set accessor expected
Run Code Online (Sandbox Code Playgroud)
InB*_*een 12
好的,让我们再看一遍.你想写
public int EmployeeNumber
{
set
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
Run Code Online (Sandbox Code Playgroud)
像这样:
public int EmployeeNumber
{
set =>
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
Run Code Online (Sandbox Code Playgroud)
问题是为什么?关于表达身体功能成员的全部观点是使事情更简洁和可读,避免花括号,返回关键字等:
public int Foo => foo
Run Code Online (Sandbox Code Playgroud)
代替,
public int Foo { return foo; }
Run Code Online (Sandbox Code Playgroud)
你试图做的事情并没有使它更具可读性,并增加了两个无用的额外令牌.这似乎是一个可怕的讨价还价.
作为一般规则,=>在右侧的代码中不应使用(或不能使用)语法:
当然规则nº3是我自己的,我不知道关于这个问题的任何编码风格的建议,但我倾向于避免这种语法,除非我没有处理没有副作用产生方法.