1

在 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_listnew List<object>null

4

1 回答 1

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;
于 2013-09-20T17:04:12.853 回答