2011-09-19 60 views
0

我們有一個使用一個索引,讓人們可以任意添加鍵值對遺留類:如何發現C#索引器中使用的密鑰?

legacyInstance["myKey"] = value; 

可悲的是,我們不能看或修改代碼以實現這個類。我們只能通過其各種屬性訪問它。

我們需要做的是以智能的方式克隆這個對象。普通屬性是簡單的克隆,當然:

myClone.blargle = legacyInstance.blargle; 

但我們如何發現所有的人可能已添加到一個特定的對象實例,以便正確地克隆它們的鑰匙?理想的情況是這樣的:

string[] keys = legacyInstance.<#magic!#>; 
foreach (string key in keys) 
{ 
    myClone[key] = legacyInstance[key]; 
} 

雖然我懷疑魔術可能會涉及一些反思,得到它被證明是困難的,因爲我是一個思考初學者。

+2

你不能。如果數據存儲在數據庫中會怎樣?反射如何幫助你呢? –

+0

第一步是在Debugger中查看legacyInstance的一個實例,並查找它的屬性。如果你能找到一個你正在尋找的鍵,那麼你可以使用反射來訪問它。 –

+0

@JohnSaunders:很棒的一點。我對此有一個普遍的不好的感覺,但是我花了太多的時間來看Reflection文檔,沒有足夠的時間思考幕後會發生什麼。你的評論使得基本問題相當清楚。 – Beska

回答

3

抓住ILSpy並進入源代碼。如果你的集合不公開成員迭代密鑰(如Dictionary公開Keys),那麼這是你唯一的選擇。順便說一下,可能你的收藏是IEnumerable?實際上,一個系列不提供任何迭代設施是奇怪的。是不是所謂的YouCanOnlyUseIndexCollection

相關問題