2017-09-13 4 views
2

Ich habe einige String-Konstanten, auf die ich aus mehreren Dateien zugreifen muss. Da sich die Werte dieser Konstanten von Zeit zu Zeit ändern können, habe ich beschlossen, sie in AppSettings anstatt in eine Konstantenklasse zu setzen, damit ich nicht jedes Mal neu kompilieren muss, wenn ich eine Konstante ändere.C# AppSettings Array

Manchmal muss ich mit den einzelnen Strings arbeiten und manchmal muss ich mit allen gleichzeitig arbeiten. Ich möchte so etwas wie dies tun:

<?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> 

Die Argumentation ist, dass ich dann in der Lage sein würde Dinge zu tun wie

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"]]; 
    //... 
} 

Gibt es eine Möglichkeit, dies zu tun? Ich bin ziemlich neu und ich gebe zu, dass das Horror-Design sein könnte.

+0

was für foo Methode? –

+0

@AkashKC Es ist nur eine Methode, die eine Zeichenfolge als Argument verwendet. Die Idee ist, dass ich für jede Konstante etwas, das von dieser Konstante abhängt, zum Wörterbuch hinzufüge. – Liam

+0

Gepostet Antwort. Bitte schauen Sie und lassen Sie mich wissen, ob der Ansatz für Sie funktioniert oder nicht –

Antwort

2

Sie müssen das Array des Schlüssels nicht in den Schlüssel AppSettings einfügen, da Sie alle Schlüssel von AppSetting aus dem Code selbst iterieren können. Also, sollten Sie Ihre AppSettings so aussehen:

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

Danach können Sie globale statische Wörterbuch erstellen, die Sie von allen Teilen des Programms zugreifen:

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; 
     } 
} 

Wie Foo method wurde von static abgerufen Eigenschaft, müssen Sie die Foo-Methode als statische Methode definieren. so, wie dies Ihre Foo Methode aussehen sollte:

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

Jetzt können Sie Dataset dictionary durch seinen Schlüssel Zugriff auf folgende Weise:

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

Wow! Es scheint jetzt so offensichtlich. Vielen Dank! – Liam

Verwandte Themen