在哪里加载预设字典?

时间:2010-04-01 11:25:14

标签: c# dictionary

每次加载程序时,我都需要一本字典来获得大约15个值。现在我正在使用一个名为“Load_Dictionary”的函数,它只是添加每个值。你怎么建议加载像这样的字典?通过功能?使用XML文件?

4 个答案:

答案 0 :(得分:4)

创建一个静态只读属性/字段并将其设置在类的静态构造函数中。

public static readonly Dictionary<string, string> Field;

static Foo()
{
    Field = new Dictionary<string, string>
        {
            {"key", "value"},
        };
}

或者在声明中做出任务:

public static readonly Dictionary<string, string> Field = new Dictionary<string, string>
    {
        {"key", "value"},
    };

答案 1 :(得分:3)

请注意,在C#3.0中,您可以使用集合初始值设定项初始化静态字段,然后您不需要自己的构造函数。保持数据私有并提供访问机制以避免同步数据的需要(因为它只是被读取):

private static readonly Dictionary<string, string> myData
    = new Dictionary<string, string> {
        {"abc","def"},
        {"ghi","jkl"},
        {"mno","pqr"},
    };
public static string GetValue(string key) { return myData[key]; }

如果您要加载 lot 数据,请考虑某种序列化形式。 Xml,二进制,数据库 - 无论如何。

答案 2 :(得分:2)

创建一个类的静态属性,并在get访问器中检查私有静态副本是否为null,如果是,则构建它,否则返回

[ThreadStatic]
private static Dictionary<string, string> _MyProperty;
public static Dictionary<string, string> MyProperty 
{
    get
    {
        return _MyProperty = _MyProperty ?? StaticFunctionToLoadValues();
    }
}

答案 3 :(得分:0)

要在正确的位置初始化它,我将创建一个静态私有函数,返回具有正确值的字典,并将其用作类中静态字段的成员初始化:

class Foo 
{
  static Dictionary<string, string> makeDictionary() 
  {
    return new Dictionary<string, string>
      {
        {"hello", "mum"},
      };
  }
  static Dictionary<string, string> theDictionary = makeDictionary();
}

至于如何编写该函数,它实际上取决于数据的形式。这种静态初始化风格应该是您的首选,除非它不适合您。由于您正在编写该函数,因此您可以随时添加其他逻辑。