我正在尝试找到存储一些全局变量的正确结构。我基本上有两组类似的变量在选项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);
任何帮助/建议将不胜感激。
答案 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