在c#中,对象初始化语法是否在赋值之前发生?

时间:2013-09-20 16:46:36

标签: c# recursive-datastructures object-initialization

在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还是未定义?

1 个答案:

答案 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;