多维混合数组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);
如果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