我有一个带有静态列表属性的静态类。我想只生成一次列表的内容,然后才能使用它。我当然也希望确保实际创建数据,以便当对象使用该类时,它在列表中包含数据。我该如何做到这一点?
public static class MyClass
{
public static List<int> MyList = new List<int>();
public MyClass()
{
for (int i = 0; i < 10; i++)
{
MyList.Add(i);
}
}
}
答案 0 :(得分:6)
- 我想只生成一次列表内容
- 我还想确保实际创建数据
当您将构造函数更改为静态代码时,您当前的代码确切地确保了:
static MyClass() { } // not public or private
类加载器将在执行该类的任何其他成员之前执行MyList
的初始化。这是在第一次使用该类时发生的。
可观察的行为是静态成员在应用程序开始时被初始化(一次)。
只有当您构建静态初始化程序相互依赖的东西时,您才可能需要思考/担心。
答案 1 :(得分:5)
您应该使用static constructor,如下所示:
static MyClass()
{
for (int i = 0; i < 10; i++)
{
MyList.Add(i);
}
}
请注意,静态构造函数不需要也不接受任何范围修饰符,如public
等。
答案 2 :(得分:0)
您可以使用列表的访问者方法以及bool
变量来跟踪列表是否已初始化并填充数据。
类似的东西:
private static List<int> myList;
private static void doInitializeList() {
myList = new List<int>();
// fill list here
}
public static List<int> getMyList() {
if (!_myListInitialized) {
doInitializeList();
}
return myList;
}