如何确保生成静态类中的数据并仅生成一次?

Bil*_*soe 3 c# static

我有一个带有静态列表属性的静态类.我想只生成一次列表的内容,然后才能使用它.我当然也希望确保实际创建数据,以便当对象使用该类时,它在列表中包含数据.我该如何做到这一点?

public static class MyClass
{
    public static List<int> MyList = new List<int>();

    public MyClass()
    {
        for (int i = 0; i < 10; i++)
        {
            MyList.Add(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 6

  • 我想只生成一次列表的内容
  • 我还想确保实际创建数据

当您将构造函数更改为静态代码时,您当前的代码确切地确保了:

  static MyClass() { }  // not public or private
Run Code Online (Sandbox Code Playgroud)

类加载器将在执行该类的MyList任何其他成员之前执行初始化.这是在第一次使用该类时发生的.

可观察的行为是静态成员在应用程序开始时被初始化(一次).

只有当您构建静态初始化程序相互依赖的东西时,您才有可能需要思考/担心.


Ser*_*sev 5

您应该使用静态构造函数,如下所示:

static MyClass()
{
    for (int i = 0; i < 10; i++)
    {
        MyList.Add(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,静态构造函数不需要也不接受任何范围修饰符等public.