我有两个私有列表,需要在创建对象时初始化。第二个列表取决于第一个列表。我可以这样做吗:
public class MyClass
{
private List<T> myList = new List<T>();
private ReadOnlyCollection<T> myReadOnlyList = myList.AsReadOnly;
...
}
第二个列表是第一个列表的只读包装。
我可以期望 c# 每次运行时都会按此顺序执行这两行吗?
或者我应该把这个初始化放在构造函数中?
Edit:
抱歉问了个愚蠢的问题。我尝试了一下,编译器说:
Error 1 A field initializer cannot reference the
non-static field, method, or property...
不可以。如果您想基于类中的单独变量来初始化变量,则需要在构造函数中执行此操作:
public class MyClass
{
private List<T> myList = new List<T>();
private ReadOnlyCollection<T> myReadOnlyList;
public MyClass()
{
myReadOnlyList = myList.AsReadOnly;
}
}
内联初始化程序始终在静态上下文中运行,这意味着您无法访问类中的成员变量。但是,在构造函数内部,您可以执行此操作。内联初始化程序将发生在构造函数之前,这就是为什么我可以将列表初始化保留在适当的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)