NameValueSectionHandler
S2.NETのMLで投稿された内容を実際に試してみて解ったのだけれど.NET(1.1)の設定ファイルのセクションハンドラの一つであるSystem.Configuration.NameValueSectionHandlerクラスはなにかおかしいと思われます。(思われると書いたのはまだ確信が持てないから)
このクラス、.NETの設定ファイル(App.config)の任意のセクションに書かれた以下の様な構造のXMLフラグメントをSystem.NameValueCollectionに落とし込んでくれるはずなのだけれど、例えば以下のようなカスタムセクションが定義されているとすると
このセクションのkey="foo"に関連付けられた複数の文字列を取得するロジックは以下のようになります。
NameValueCollection confg = (NameValueCollection)ConfigurationSettings.GetConfig("hoge"); string[] fooBars = confg.GetValues("foo");
このロジックを実行した結果として文字配列fooBarsには"{bar1, bar2, bar3}"が格納されているはずなのだけど実際の結果はなぜか"{bar3}"となるのです。
私自身はこういうカスタムセクションを使う場合はそもそも標題のハンドラは使わずにIConfigurationSectionHandlerをimplementsしたクラスを用意してXMLの構造もそれっぽくしてしまう
ので今回のようなケースは初めてみたわけです。ちなみにカスタムセクションでもハンドラクラスの指定無しに決められた要素であるappSettingsを使うこともできるんですがNameValueCollectionを戻すということで予想は付いていたんですが結果は最初と同じでした。
仕様なのか制限なのかバグなのかがはっきりするまではもやもやしそう。
追記:.NET2.0(β2)の新しいConfigurationManagerで試してみたけれど結果は変わらなかった。
NameValueCollection confg = (NameValueCollection)ConfigurationManager.GetSection("hoge"); string[] fooBars = confg.GetValues("foo");
.NET2.0で解決していたら「やっぱりバグだったのね」ちゃんちゃん、だったんだけど同じ結果だと言うことはこれは想定通りの動きなのかもしれない。むーん。