当句子更多时,用C#6.0编写新的get和set属性的方法是什么?

时间:2018-08-20 16:54:30

标签: c#-6.0

在最新的C#版本的属性中,获取并设置更多语句的方式是:

ObservableCollection<Product> products;
public ObservableCollection<Product> Products
{
   get
   {
     return products;
   }
   set
   {
     products = value;
     OnPropertyChanged("Products");
   }
}

但是在C#6.0中如何?因为新样式使用了lambda运算符:

ObservableCollection<Product> products;
public ObservableCollection<Product> Products
{ 
  get => products; 
  set => products= value; 
}

谢谢。

1 个答案:

答案 0 :(得分:1)

自c#3开始,自动实现的属性(自动属性)就已经存在。

public int Age { get; set; }

C#6进行了一些改进,其中之一是自动属性初始化程序

public int Age { get; } = 30;

但是我认为您要使用的是另一个功能, Expression-bodyd函数成员

public void SayHello(string name) => Console.WriteLine("hello {0}", name);

public string FullName => string.Format("{0} {1}", FirstName, LastName);

表达主体函数成员
我们编写的许多成员的主体由只有一个语句组成,可以表示为表达式。您可以通过编写表达式主体成员来减少该语法。它适用于方法和只读属性

Expression-bodied function members

在您的情况下,您不能使用它们,因为您的属性不是只读的。

也许这可以帮助您。
How to implement INotifyPropertyChanged in C# 6.0?

更新:

C#7引入了所需的语法,但仅适用于单行表达式。

属性集声明link
如果您选择自己实现属性集访问器,则可以为单行表达式使用表达式主体定义,该表达式将值分配给支持该属性的字段。

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   } 
}