C#访问器和初始化[重复]

Posted

技术标签:

【中文标题】C#访问器和初始化[重复]【英文标题】:C# Accessor and initialization [duplicate] 【发布时间】:2014-09-05 12:31:37 【问题描述】:

我们如何结合c#访问器声明和初始化

List<string> listofcountries= new List<string>();
and 
List<string>listofcountries get;set;

有没有办法将这些组合成语句?

【问题讨论】:

你可以在构造函数中初始化它们 目前我正在这样做,只是好奇是否有其他/更好的出路 ***.com/questions/40730/… 【参考方案1】:

你现在不能。您将能够在 C# 6 中:

List<string> Countries  get; set;  = new List<string>();

您甚至可以在 C# 6 中将其设为只读属性(万岁!):

List<string> Countries  get;  = new List<string>();

在 C# 5 中,您可以或者使用非自动实现的属性:

// Obviously you can make this read/write if you want
private readonly List<string> countries = new List<string>();
public List<string> Countries  get  return countries;  

...或者在构造函数中初始化:

public List<string> Countries  get; set; 

public Foo()

    Countries = new List<string>();

【讨论】:

我正在查看您的答案,您说它是 5 或更高:***.com/questions/169220/… @eranotzap:嗯,不 - 请仔细阅读。它说它在 C# 5 之前可用,包括 C# 5,但它计划在 C# 6 中可用。 好吧对不起,我的错【参考方案2】:

仅在 C# 6 中。

我通常喜欢做的是:

  private List<string> list;
  public List<string> List
  
     get
     
         if(list == null)
         
            list = new List<string>();
         

         return list;  
     
  

【讨论】:

【参考方案3】:

不在同一个语句中。 您可以在构造函数主体中执行此操作

【讨论】:

【参考方案4】:

您可以使用构造函数,也可以创建自定义 getter/setter:

构造函数

public class Foo

    public Foo()
    
        listofcountries = new List<string>();
    

    public List<string> listofcountries  get; set; 

自定义 Getter/Setter

private List<string> _listofcountries;
public List<string> listofcountries

    get
     
        if (_listofcountries == null)
        
            _listofcountries = new List<string>();
        
        return _listofcountries;
    
    set  _listofcountries = value; 

为了它的价值,惯例是让公共属性是驼峰式的:ListOfCountries而不是listofcountries。然后属性的私有实例变量也将是驼峰式大小写,但第一个字母小写:listOfCountries 而不是_listofcountries

更新 Skeet FTW,像往常一样。一旦 C# 6 成功,那么他的答案将是最好的方法,放下手。在较小的版本中,您会坚持使用我发布的方法。

【讨论】:

您的自定义 getter 不合适,好像它为 null 并且您使用该 getter 两次,您将获得两个不同的列表 - 您想分配给 _listofcountries 对。这就是我发布得太快的结果。固定。 还有“编写自定义属性,但不要费心让它变得懒惰”的方法,这意味着它只是一个两条线......没有迹象表明 OP 想要 分配是惰性的。

以上是关于C#访问器和初始化[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#里类型初始化器和构造方法有啥区别 他们分别在啥情况下用?

Python 迭代器和生成器

初始化 C# 自动属性 ​​[重复]

通过引用传递值类型而不在c#中初始化[重复]

初始化 C# 哈希表的最简洁方法 [重复]

迭代器和生成器