多维混合数组与静态类与其他任何东西相比?

时间:2015-05-17 07:55:56

标签: c#

我正在尝试找到存储一些全局变量的正确结构。我基本上有两组类似的变量在选项A / B下分组。 A和B集之间的选择是从app.config完成的。数据具有以下结构:

[OptionA][VAR1] = "myValue1OptionA"
[OptionA][VAR2] = {'a','b','c'}
[OptionA][VAR3] = 3
[OptionB][VAR1] = "myValue1OptionB"
[OptionB][VAR2] = {'a','b','c','d','e'}
[OptionB][VAR3] = 120

我可以使用带有元组作为索引的字典,但在使用变量时,它在转换方面有点重:

private static GlobalVar<Tuple<string, string>, var> instances = 
            new Dictionary<Tuple<string, string>, var>(){
            {Tuple.Create("OptionA","VAR1"), "myValue1OptionA"},
            {Tuple.Create("OptionA","VAR2"), {'a','b','c'}},
            {Tuple.Create("OptionA","VAR3"), 3},
            {Tuple.Create("OptionB","VAR1"), "myValue1OptionB"},
            {Tuple.Create("OptionB","VAR2"), {'a','b','c','d','e'}},
            {Tuple.Create("OptionB","VAR3"), 120},
            };

我想到了2个静态类,但检索值和转换也有点麻烦。

static class GlobalVarOptionA
{
    static string VAR1 = "myValue1OptionA";
    static char[] VAR2 = {'a','b','c'};
    static int VAR3 = 3;
}

static class GlobalVarOptionB
{
    static string VAR1 = "myValue1OptionB";
    static char[] VAR2 = {'a','b','c','d','e'};
    static int VAR3 = 120;
}

用法应该是这样的:

Type t = Type.GetType("GlobalVarOptionB");
var pinfo = t.GetProperties(BindingFlags.Static | BindingFlags.Public);

任何帮助/建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果A和B之间的选择来自app.config文件,这意味着它在程序启动时完成一次。

因此,在阅读app.config之后,您应该在内存中创建/初始化一个这些结构。

因为它是结构化数据(而不是字符串/字符串列表),所以我像使用static class GlobalVarOption一样使用静态类

答案 1 :(得分:1)

对我来说,更好的方法是一个带有属性的静态类,您可以在内部检查返回哪个选项

或使用单身模式

class GlobalVariables
{

   public static GlobalVariables Instance = new GlobalVariables();

   public readonly string VAR1;
   public readonly char[] VAR2;
   public readonly int VAR3;

   private GlobalVariables()
   {
      // Set values based on the App.config options
   }
}

使用

GlobalVariables.Instance.VAR1