首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# AppSettings阵列

C# AppSettings阵列
EN

Stack Overflow用户
提问于 2017-09-13 23:39:22
回答 1查看 1.1K关注 0票数 2

我需要从多个文件访问一些字符串常量。由于这些常量的值可能会不时变化,所以我决定将它们放在AppSettings中而不是常数类中,这样就不必每次更改常量时都重新编译它们。

有时我需要处理单个字符串,有时我需要同时处理所有字符串。我想做这样的事情:

代码语言:javascript
复制
<?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>

理由是这样我就能做一些事情

代码语言:javascript
复制
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"]];
    //...
}

有办法这样做吗?我对此非常陌生,我承认这可能是可怕的设计。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 00:02:56

您不需要在AppSettings键中放置键数组,因为您可以从代码本身迭代AppSetting的所有键。所以,您的AppSettings应该是这样的:

代码语言:javascript
复制
 <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>

之后,您可以创建全局静态字典,您可以从程序的所有部分访问该字典:

代码语言:javascript
复制
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方法应该如下所示:

代码语言:javascript
复制
private static List<double> Foo(string key)
{
    // Process and return value 
    return Enumerable.Empty<double>().ToList(); // returning empty collection for demo
}

现在,您可以按其键访问Dataset dictionary,方法如下:

代码语言:javascript
复制
public void ProcessData1()
{
    List<double> data = Dataset["CONST1"];
    //...
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46208348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档