2015-05-17 49 views
0

我想找到合適的結構來存儲一些全局變量。我基本上有兩組類似的變量按照選項A/B分組。 A和B之間的選擇是通過app.config完成的。該數據具有以下結構:多維混合數組vs靜態類vs其他任何東西?

[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); 

任何幫助/建議將不勝感激。

回答

1

如果A和B之間的選擇來自app.config文件,這意味着它在程序啓動時完成一次。

所以你應該在讀取app.config後在內存中創建/初始化這些結構的一個

因爲它是結構化的數據(而不是一個字符串/字符串列表)我會使用一個靜態類作爲您static class GlobalVarOption

1

對我來說更好的方法做會隨着性能的一個靜態類,你可以在內部檢查哪個選項返回

或使用Singleton模式,

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 
+0

感謝您的反饋。我做了這個:-) – Salim