VS2017 with new getter/setter syntax: How to write multiple lines in the setter?/
VS2017 with new getter/setter syntax: How to write multiple lines in the setter?/
我正在使用 .NET Framework 4.5.2,VS2017。
VS2017 为 getter 和 setter 提供了新语法。现在 属性 和 getter setter 如下所示:
public string Name { get => _name; set => _name = value; }
我必须写下面属性。如何使用 lambda 表达式 set=> 编写 setter ?
public int EmployeeNumber
{
get => _employeeNumber;
set { _employeeNumber = value; OnPropertyChanged("EmployeeNumber");}
}
比如这样的:
public int EmployeeNumber
{
get => _employeeNumber;
set =>{ _employeeNumber = value;OnPropertyChanged("EmployeeNumber"); }
}
对于上面的 setter,我得到 3 个错误:
CS1525: Invalid expression term {
CS1002: ; expected
CS1014: A get or set accessor expected
好的,让我们再讨论一遍。你要写
public int EmployeeNumber
{
set
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
像这样:
public int EmployeeNumber
{
set =>
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
问题是为什么?表达式主体函数成员的全部意义在于使事情更简洁和可读,避免花括号、return 关键字等:
public int Foo => foo
而不是,
public int Foo { return foo; }
您尝试做的事情并没有使它更具可读性,而是添加了两个无用的额外标记。这似乎是一个糟糕的交易。
作为一般规则,当右侧的代码为:
时,您不应使用(或不能使用)=>
语法
- 没有 return 任何东西(抛出异常是异常,双关语)
- 由多个表达式组成。
- 是不是因为它产生的副作用。
当然第 3 条规则是我一个人的,我不知道关于这个问题的任何编码风格建议,但我倾向于避免使用这种语法,除非我正在处理没有副作用的方法。
我正在使用 .NET Framework 4.5.2,VS2017。 VS2017 为 getter 和 setter 提供了新语法。现在 属性 和 getter setter 如下所示:
public string Name { get => _name; set => _name = value; }
我必须写下面属性。如何使用 lambda 表达式 set=> 编写 setter ?
public int EmployeeNumber
{
get => _employeeNumber;
set { _employeeNumber = value; OnPropertyChanged("EmployeeNumber");}
}
比如这样的:
public int EmployeeNumber
{
get => _employeeNumber;
set =>{ _employeeNumber = value;OnPropertyChanged("EmployeeNumber"); }
}
对于上面的 setter,我得到 3 个错误:
CS1525: Invalid expression term {
CS1002: ; expected
CS1014: A get or set accessor expected
好的,让我们再讨论一遍。你要写
public int EmployeeNumber
{
set
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
像这样:
public int EmployeeNumber
{
set =>
{
_employeeNumber = value;
OnPropertyChanged("EmployeeNumber");
}
}
问题是为什么?表达式主体函数成员的全部意义在于使事情更简洁和可读,避免花括号、return 关键字等:
public int Foo => foo
而不是,
public int Foo { return foo; }
您尝试做的事情并没有使它更具可读性,而是添加了两个无用的额外标记。这似乎是一个糟糕的交易。
作为一般规则,当右侧的代码为:
时,您不应使用(或不能使用)=>
语法
- 没有 return 任何东西(抛出异常是异常,双关语)
- 由多个表达式组成。
- 是不是因为它产生的副作用。
当然第 3 条规则是我一个人的,我不知道关于这个问题的任何编码风格建议,但我倾向于避免使用这种语法,除非我正在处理没有副作用的方法。