ReadOnlyNameValueCollection(从ConfigurationManager.GetSection读取)

时间:2011-05-16 14:56:41

标签: c# .net asp.net types configurationmanager

好的,所以......

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

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

到目前为止一切顺利。调试器显示test包含一个密钥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表示此类没有任何文档。它似乎不存在。然而,我的代码中有一个这种类型的实例。

1 个答案:

答案 0 :(得分:14)

System.Configuration.ReadOnlyNameValueCollection是System.dll程序集的internal类。所以你不能从你的代码中引用它。它来自System.Collections.Specialized.NameValueCollection,所以这就是为什么你能够用演员来做到这一点。