对类的静态成员的奇怪行为 - 这怎么可能?

Joe*_*ank 9 c# static-members static-classes c#-4.0

考虑以下课程:

public class MyClass
{
    public static string[] SomeAmazingConsts = { Const1 };
    public static string Const1 = "Constant 1";
    public static string Const2 = "Constant 2";
}
Run Code Online (Sandbox Code Playgroud)

现在,查看用法:

class Program
{
    static void Main(string[] args)
    {
        string[] s = MyClass.SomeAmazingConsts;
        //s[0] == null
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是s [0] == null!怎么会发生这种情况?现在,重新排序MyClass的静态变量,如下所示:

public class MyClass
{
    public static string Const1 = "Constant 1";
    public static string Const2 = "Constant 2";
    public static string[] SomeAmazingConsts = { Const1 };
}
Run Code Online (Sandbox Code Playgroud)

事情开始正常运作.任何人都可以对此有所了解吗?

Adr*_*der 14

10.4.5.1静态字段初始化

类的静态字段变量初始值设定项对应于以它们出现在类声明中的文本顺序执行的赋值序列.

因此,初始化从上到下发生,并且在第一种情况下Const1尚未初始化,因此null

  • 我使用 ReSharper,并且消息(仅是警告)指出 *静态字段初始值设定项是指下方或其他部分中的静态字段*。所以你可能想考虑使用代码分析工具?此外,您的变量定义在正确的范围内,只是当时没有初始化。 (2认同)