web-dev-qa-db-ja.com

特定の名前で始まるappsettingsキーからすべての値を取得し、これを任意の配列に渡す方法は?

私のweb.configファイルには

<appSettings>
    <add key="Service1URL1" value="http://managementService.svc/"/>
    <add key="Service1URL2" value="http://ManagementsettingsService.svc/HostInstances"/>
    ....lots of keys like above
</appSettings>

Service1URLで始まるキーの値を取得し、C#クラスのstring[] repositoryUrls = { ... }に値を渡します。どうすればこれを達成できますか?

私はこのようなことを試みましたが、値をつかむことができませんでした:

foreach (string key in ConfigurationManager.AppSettings)
{
    if (key.StartsWith("Service1URL"))
    {
        string value = ConfigurationManager.AppSettings[key];            
    }

    string[] repositoryUrls = { value };
}

私はそれを間違った方法で行っているか、ここで何かを見逃しています。どんな助けも本当に感謝されます。

27
user2133617

私は少しLINQを使用します:

string[] repositoryUrls = ConfigurationManager.AppSettings.AllKeys
                             .Where(key => key.StartsWith("Service1URL"))
                             .Select(key => ConfigurationManager.AppSettings[key])
                             .ToArray();
69
Ann L.

繰り返しごとに配列を上書きしています

List<string> values = new List<string>();
foreach (string key in ConfigurationManager.AppSettings)
        {
            if (key.StartsWith("Service1URL"))
            {
                string value = ConfigurationManager.AppSettings[key];
                values.Add(value);
            }

        }

string[] repositoryUrls = values.ToArray();
12
TGH

興味のある変数を保持するクラスを定義し、プロパティを反復処理して、app.configで一致するものを探します。

その後、必要に応じてインスタンスを使用できます。考え?

public static ConfigurationSettings SetConfigurationSettings
{
    ConfigurationSettings configurationsettings = new   ConfigurationSettings();
    {
        foreach (var prop in  configurationsettings.GetType().GetProperties())
        {
            string property = (prop.Name.ToString());
            string value = ConfigurationManager.AppSettings[property];
            PropertyInfo propertyInfo = configurationsettings.GetType().GetProperty(prop.Name);
            propertyInfo.SetValue(configurationsettings, value, null);
        }
    }

    return configurationsettings;
 }
1
Pat