現在、私のアプリケーションにはapp.configが次のように設定されています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="DeviceSettings">
<section name="MajorCommands" type="System.Configuration.DictionarySectionHandler"/>
</sectionGroup>
</configSections>
<appSettings>
<add key="ComPort" value="com3"/>
<add key="Baud" value="9600"/>
<add key="Parity" value="None"/>
<add key="DataBits" value="8"/>
<add key="StopBits" value="1"/>
<add key="Ping" value="*IDN?"/>
<add key="FailOut" value="1"/>
</appSettings>
<DeviceSettings>
<MajorCommands>
<add key="Standby" value="STBY"/>
<add key="Operate" value="OPER"/>
<add key="Remote" value="REMOTE"/>
<add key="Local" value="LOCAL"/>
<add key="Reset" value="*RST" />
</MajorCommands>
</DeviceSettings>
</configuration>
私の現在の目的は、Foreachするか、MajorCommandsのすべての値をDictionary<string, string>
の形式はDictionary<key, value>
。 System.Configurationを使用していくつかの異なるアプローチを試しましたが、どれも機能していないようで、正確な質問の詳細を見つけることができませんでした。これを行う適切な方法はありますか?
ConfigurationManager
クラスを使用すると、app.config
ファイルからセクション全体をHashtable
として取得できます。これは、必要に応じてDictionary
に変換できます。
var section = (ConfigurationManager.GetSection("DeviceSettings/MajorCommands") as System.Collections.Hashtable)
.Cast<System.Collections.DictionaryEntry>()
.ToDictionary(n=>n.Key.ToString(), n=>n.Value.ToString());
System.Configuration
アセンブリへの参照を追加する必要があります
あなたはほとんどそこにいます-あなたはMajorCommandsを深すぎるレベルにネストしました。これに変更するだけです:
<configuration>
<configSections>
<section
name="MajorCommands"
type="System.Configuration.DictionarySectionHandler" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<MajorCommands>
<add key="Standby" value="STBY"/>
<add key="Operate" value="OPER"/>
<add key="Remote" value="REMOTE"/>
<add key="Local" value="LOCAL"/>
<add key="Reset" value="*RST" />
</MajorCommands>
</configuration>
そして、以下があなたのために働くでしょう:
var section = (Hashtable)ConfigurationManager.GetSection("MajorCommands");
Console.WriteLine(section["Reset"]);
これは、ディクショナリではなく、ハッシュテーブル(タイプセーフではない)であることに注意してください。 Dictionary<string,string>
にしたい場合は、次のように変換できます。
Dictionary<string,string> dictionary = section.Cast<DictionaryEntry>().ToDictionary(d => (string)d.Key, d => (string)d.Value);