好的,所以......
<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
表示此类没有任何文档。它似乎不存在。然而,我的代码中有一个这种类型的实例。
答案 0 :(得分:14)
System.Configuration.ReadOnlyNameValueCollection
是System.dll程序集的internal
类。所以你不能从你的代码中引用它。它来自System.Collections.Specialized.NameValueCollection
,所以这就是为什么你能够用演员来做到这一点。