多维混合数组vs静态类vs其他任何东西

本文关键字:vs 其他 任何东 静态类 混合 数组 | 更新日期: 2023-09-27 17:49:30

我试图找到正确的结构来存储一些全局变量。我基本上有两组类似的变量分组在选项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);

多维混合数组vs静态类vs其他任何东西

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

所以在app.config被读取后,你应该在内存中创建/初始化这些结构体中的一个

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

一样。

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

或使用单例模式

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