在c#中,对象初始化如:
var thing = new List<object>() {new object()};
在作业之前发生,因此它与:
大致相同var _thing = new List<object>();
_thing.Add(new object());
var thing = _thing;
或者在分配后发生,因此它与:
大致相同var thing = new List<object>();
thing.Add(new object());
如果您想在工厂中绑定一个递归结,这会产生影响:
static class AbstractFactory {
private static readonly IEnumerable<object> _list = new List<object>() {GetIEnumerable()};
public static IEnumerable<object> GetIEnumerable() {
return _list;
}
}
在_list
的初始值设定项中调用方法后,从GetIEnumerable
返回_list
时,是new List<object>
,null
还是未定义?
答案 0 :(得分:2)
它编译为第一个例子,即object initialization occurs before assignment
。
您可以使用.Net Reflector查看已编译的版本。它编译为此(使用反射器提取) -
List<object> <>g__initLocal0 = new List<object>();
<>g__initLocal0.Add(new object());
List<object> thing = <>g__initLocal0;