使用默认值初始化列表

Oli*_*pel 0 c#

我想要一个类,它将所有"允许的语言"存储在列表中.代码方应该能够修改列表.但是在第一次使用时,列表应该用一些默认值"初始化".

我有以下课程:

public class ApiLanguages
{
    public static List<string> AllowedLanguages { get; set; }

    public ApiLanguages()
    {
        AllowedLanguages.Add("de");
        //AllowedLanguages.Add("en");
        //AllowedLanguages.Add("es");
        //AllowedLanguages.Add("fr");
        //AllowedLanguages.Add("it");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我现在在代码中访问类时

foreach (var language in ApiLanguages.AllowedLanguages)
{
      // do something here...
}
Run Code Online (Sandbox Code Playgroud)

ApiLanguages.AllowedLanguages为空.但我期待一个条目("de").我在这做错了什么?

Yac*_*sad 5

public ApiLanguages()是一个实例构造函数.当您创建ApiLanguages(via new ApiLanguages())的新实例时,它仅运行(并且每次都运行).它的目的是初始化实例变量,而不是静态变量.通常不应在实例构造函数中初始化静态属性或字段.

您需要使用静态构造函数来初始化静态列表,如下所示:

public class ApiLanguages
{
    public static List<string> AllowedLanguages { get; set; }

    static ApiLanguages()
    {
        AllowedLanguages = new List<string>();
        AllowedLanguages.Add("de");
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)