7

わかりました、そう.....

<section name="test" type="System.Configuration.NameValueFileSectionHandler" />
<test>
   <add key="foo" value="bar" />
</test>

var test = ConfigurationManager.GetSection("test");

ここまでは順調ですね。デバッガーのショーtestには、1つのキーが含まれていますfoo

しかし、GetSectionが返さobjectれるので、キャストが必要です。

var type = test.GetType();
// FullName: System.Configuration.ReadOnlyNameValueCollection
// Assembly: System

わかりました、これは十分に単純なはずです。それで....

using System;

var test = ConfigurationManager
               .GetSection("test") as ReadOnlyNameValueCollection;

エラー!

The type or namespace ReadOnlyNameValueCollection does not exist in the namespace System.Configuration. Are you missing an assembly reference?

エラー...wtf?

コードを機能させるためのキャストSystem.Collections.Specialized.NameValueCollectionですが、エラーの理由がよくわかりません。

また、MSDNで検索すると、ReadOnlyNameValueCollectionこのクラスに関するドキュメントはまったくありません。存在しないようです。それでも、コードにはそのタイプのインスタンスがあります。

4

1 に答える 1

15

System.Configuration.ReadOnlyNameValueCollectioninternalSystem.dllアセンブリのクラスです。したがって、コードからそれを参照することはできません。しかし、それはから派生してSystem.Collections.Specialized.NameValueCollectionいるので、キャストでそれを行うことができるのはそのためです。

于 2011-05-16T15:02:03.470 に答える