列表初始化构造函数或属性

时间:2016-04-20 13:27:19

标签: c# list properties initialization

我有一个类商店。我需要知道什么是更好的方式,以及在初始化中有什么区别。

class Store
{
   // do we initialise List of Item here in property
   public List<Item> Items { get; set; } = new List<Item>();

   public Store()
   {
      // we can instantiate list in constructor 
      Items = new List<Item>();
   }

   public Store(string myString)
   {
      // lets say we have another constructor here and if this one is called
      // than List in default constructor will not be initialised
   }

}
  1. 在属性中初始化List是否更好?
  2. 属性初始化和构造函数之间有什么区别?
  3. 何时调用属性初始化?
  4. 令我惊讶的是,我没有初始化List(我评论过的行),当我创建Store类的新实例时,它没有抛出错误System.NullReferenceException。如果我评论List实例,为什么它不会抛出错误。我使用的是VS 2015,可以自动使用这个版本。

1 个答案:

答案 0 :(得分:1)

  1. 如果你想编写更少的代码,那就更好了。幕后没有任何区别。
  2. 如果在构造函数中初始化它,则可以更改初始化顺序的唯一区别。在场景编译器后面将您的自动属性转换为具有支持字段的属性,并在所有构造函数的开头添加此字段的初始化。因此,在您的代码中,您只需覆盖默认构造函数中的Items属性。
  3. 它在构造函数中被调用(在开头)。
  4. 见第2页
  5. 还有类似问题Difference between (auto) properties initialization syntax in C# 6