好了,所以.....ReadOnlyNameValueCollection(從ConfigurationManager.GetSection閱讀)
<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?
嗯...跆拳道?
轉換到System.Collections.Specialized.NameValueCollection
得到的代碼工作,但我真的不明白爲什麼錯誤。
而在MSDN上搜索ReadOnlyNameValueCollection
顯示根本沒有這個類的文檔。它似乎並不存在。然而我在我的代碼中有這種類型的實例。
好吧,這是有道理的。但是他們爲什麼要從公開的方法中返回一個內部類?然後不提供任何文件?這不被認爲是不好的做法?你想在什麼情況下這樣做? – fearofawhackplanet 2011-05-16 15:08:01
看起來有些奇怪,但函數的返回類型實際上是'object',所以它不像他們直接暴露內部類型(甚至不會編譯,我不相信)。而且,由於它來自公共類型,因此可以使用該對象。從我所知道的來看,GetSection的意義在於,你知道什麼時候你打電話給它,你期望從中獲得什麼。所以只要有*東西*爲它投下來是有效的,這似乎是合理的。 我比較它返回一個內部的派生類型,當返回類型真的是基類型。那裏沒有問題,對吧? – Tim 2011-05-16 15:10:28
您可以使用'dynamic'關鍵字訪問成員(例如Keys)。 – user2341923 2014-11-08 11:07:46