这段代码在C#中具有明确定义的不可工作行为:
class Foo
{
static List<int> to = new List<int>( from ); // from is still null
static IEnumerable<int> from = Something();
}
注意:我不是在询问如何修复那段代码,因为我已经知道如何做了。
这是什么样的合理化解释呢?C#已经进行运行时检查来检测静态成员的首次访问。为什么不将其扩展到每个成员,并在需要时运行它们,甚至更好的是让编译器在编译时确定其顺序呢?
顺便说一下:我认为对于非静态成员,也存在同样的问题(或几乎相同的问题)。