2017-09-13 8 views
2

複数のファイルからアクセスする必要がある文字列定数があります。これらの定数の値は時々変更される可能性があるので、定数を変更するたびに再コンパイルする必要がないように、それらを定数クラスではなくAppSettingsに入れることにしました。C#AppSettings array

時には私は個々の文字列を扱う必要があり、時にはそれらを一度にすべて処理する必要がある場合もあります。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
     <add key="CONST1" value="Hi, I'm the first constant." /> 
     <add key="CONST2" value="I'm the second." /> 
     <add key="CONST3" value="And I'm the third." /> 

     <add key="CONST_ARR" value=[CONST1, CONST2, CONST3] /> 
    </appSettings> 
</configuration> 

私はその後、

public Dictionary<string, List<double>> GetData(){ 
    var ret = new Dictionary<string, List<double>>(); 
    foreach(string key in ConfigurationManager.AppSettings["CONST_ARR"]) 
     ret.Add(key, foo(key)); 
    return ret; 
} 

//... 

Dictionary<string, List<double>> dataset = GetData(); 

public void ProcessData1(){ 
    List<double> data = dataset[ConfigurationManager.AppSettings["CONST1"]]; 
    //... 
} 

のようなものを行うことができるでしょうということで推論はこれを行う方法があります:私はこのような何かをしたいのですが?私はこれにかなり新しいです、そして、私はこれが恐ろしいデザインかもしれないことを認めます。

+0

fooメソッドのために何ですか? –

+0

@AkashKCそれは文字列を引数として取る単純な方法です。アイデアは、各定数に対して、その定数に依存するものを辞書に追加することです。 – Liam

+0

投稿された回答。あなたのためにアプローチが有効であるかどうかを見て、私に知らせてください –

答えて

2

AppSettingsキーにキーの配列を配置する必要はありません。コード自体からAppSettingのすべてのキーを繰り返し処理できるためです。だから、あなたのAppSettingsは次のようにする必要があります:Foo methodとして

public static Dictionary<string, List<double>> Dataset 
{ 
     get 
     { 
      var ret = new Dictionary<string, List<double>>(); 
      // Iterate through each key of AppSettings 
      foreach (string key in ConfigurationManager.AppSettings.AllKeys) 
       ret.Add(key, Foo(ConfigurationManager.AppSettings[key])); 
      eturn ret; 
     } 
} 

staticからアクセスされました:

<appSettings> 
    <add key="CONST1" value="Hi, I'm the first constant." /> 
    <add key="CONST2" value="I'm the second." /> 
    <add key="CONST3" value="And I'm the third." /> 
</appSettings> 

この後、あなたがプログラムのすべての部分からアクセスできるグローバルな静的辞書を作成することができますFooメソッドを静的メソッドとして定義する必要があります。そう、あなたのfooメソッドは次のようになります。

private static List<double> Foo(string key) 
{ 
    // Process and return value 
    return Enumerable.Empty<double>().ToList(); // returning empty collection for demo 
} 

さて、あなたは道を以下にそのキーでデータセットdictionaryにアクセスすることができます。

public void ProcessData1() 
{ 
    List<double> data = Dataset["CONST1"]; 
    //... 
} 
+0

うわー!今はとても分かりやすいようです。ありがとうございました! – Liam