2017-09-13 4 views
2

J'ai certaines constantes de chaîne auxquelles j'ai besoin d'accéder à partir de plusieurs fichiers. Puisque les valeurs de ces constantes peuvent changer de temps en temps, j'ai décidé de les mettre dans AppSettings plutôt que dans une classe de constantes afin de ne pas avoir à recompiler chaque fois que je change une constante.C# AppSettings array

Parfois, je dois travailler avec les chaînes individuelles et parfois je dois travailler avec chacune d'entre elles à la fois. Je voudrais faire quelque chose comme ceci:

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

Le raisonnement étant que je serai alors en mesure de faire des choses comme

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

Est-il possible de le faire? Je suis assez nouveau à ce sujet et je concède que ce pourrait être un design horrible.

+0

ce qui est pour la méthode foo? –

+0

@AkashKC C'est juste une méthode qui prend une chaîne comme argument. L'idée est que pour chaque constante j'ajoute quelque chose qui dépend de cette constante dans le dictionnaire. – Liam

+0

Réponse affichée. S'il vous plaît jeter un oeil et laissez-moi savoir si l'approche fonctionne pour vous ou non –

Répondre

2

Vous n'avez pas besoin de placer un tableau de clés dans la clé AppSettings car vous pouvez itérer toutes les clés de AppSetting à partir du code lui-même. Ainsi, votre AppSettings devrait ressembler à ceci:

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

Après cela, vous pouvez créer le dictionnaire global statique que vous pouvez accéder à partir de tout partie du programme:

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

Comme Foo method a été accessible à partir static propriété, vous devez définir la méthode Foo comme méthode statique. donc, votre méthode de Foo devrait ressembler à ceci:

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

Maintenant, vous pouvez accéder Dataset dictionary par sa clé suivante façon:

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

Wow! Cela semble tellement évident maintenant. Je vous remercie! – Liam