C# AppSettings 数组
C# AppSettings array
我有一些字符串常量需要从多个文件访问。由于这些常量的值可能会不时更改,因此我决定将它们放在 AppSettings 而不是常量 class 中,这样我就不必每次更改常量时都重新编译。
有时我需要处理单个字符串,有时我需要同时处理所有字符串。我想做这样的事情:
<?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"]];
//...
}
有办法吗?我对此很陌生,我承认这可能是一个可怕的设计。
您不需要将键数组放入 AppSettings
键中,因为您可以从代码本身迭代 AppSetting 的所有键。所以,你的 AppSettings
应该是这样的:
<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>
在此之后,您可以创建全局静态字典,您可以从程序的所有部分访问它:
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;
}
}
由于 Foo method
已从 static
属性 访问,您需要将 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"];
//...
}
我有一些字符串常量需要从多个文件访问。由于这些常量的值可能会不时更改,因此我决定将它们放在 AppSettings 而不是常量 class 中,这样我就不必每次更改常量时都重新编译。
有时我需要处理单个字符串,有时我需要同时处理所有字符串。我想做这样的事情:
<?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"]];
//...
}
有办法吗?我对此很陌生,我承认这可能是一个可怕的设计。
您不需要将键数组放入 AppSettings
键中,因为您可以从代码本身迭代 AppSetting 的所有键。所以,你的 AppSettings
应该是这样的:
<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>
在此之后,您可以创建全局静态字典,您可以从程序的所有部分访问它:
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;
}
}
由于 Foo method
已从 static
属性 访问,您需要将 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"];
//...
}