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#访问器和初始化[重复]的主要内容,如果未能解决你的问题,请参考以下文章