2014-06-18 37 views
0

這個問題可能有點長鏡頭不過請往下看:C#動態TValue在字典

我有一組被運行,所有的數據都存儲在dictionarys存儲過程。

例如,getEventTypes存儲在eventTypeResult字典中,getEventCats存儲在dictonary eventCatResult中。

是否有可能運行以下行動態地:

Dictionary<string, eventTypeResult> resultsList = (Dictionary<string, eventTypeResult>)resultsObject; 

在哪裏可以是這個樣子:

var resultType = eventTypeResult; 

Dictionary<string, resultType > resultsList = (Dictionary<string, resultType >)resultsObject; 

感謝您的幫助。

編輯:嘗試2在解釋爲什麼它需要是動態的

目前我的代碼看起來是這樣的:

if (resultType == "eventTypeResult") 
{ 
    Dictionary<string, eventTypeResult> resultsList = (Dictionary<string, eventTypeResult>)resultsObject; 
} 
else if (resultType == "eventDateResult") 
{ 
    Dictionary<string, eventDateResult> resultsList = (Dictionary<string, eventDateResult>)resultsObject; 
} 
else if 
else if 
else if 
ect 
ect 

難道不只是這樣的:

var resultType = eventTypeResult; 

Dictionary<string, resultType > resultsList = (Dictionary<string, resultType >)resultsObject; 
+0

什麼你的意思是動態的嗎?它的問題是什麼樣的? –

+0

很抱歉,很難解釋這一點。看我的編輯:)謝謝 – LiveKarma

+0

不幸的是,打字不能這樣做。當你嘗試'var resultType = eventTypeResult;'時,你已經看到了很多東西,因爲這會給你''eventTypeResult''是一個'type',但是被用作'variable''錯誤。最好的解決方案取決於您的最終目標:您是否在尋找可重新打包的其他案例?您是否想要合併代碼,對結果執行相同的操作,並且'eventTypeResult'和'eventDateResult'具有相似的簽名?或者,你是否需要幾乎完全處理每個案例,取決於類型? –

回答

1

「動態「可能不是強類型語言中的最佳方法... 您試圖創建的是任意名稱值集合,如各種緩存類型.Net框架中的pes。你需要在一個通用的類型上進行中繼,這個類型可以保存所有的結果類型。

如果您有類似resultType這樣的類型,則結果類型的所有其餘部分將繼承,然後使用它:Dictionary<string, resultType >。你可以把任何你想要的價值,只要它是子類resultType。如果你想動就可以

var thing = new Dictionery<int>() 
var objectThing = thing.Cast<Dictionery<object>(); 

:如果你沒有再使用Dictionary<string, object >

,如果你需要Dictioneries之間投可以隨時(對象acutal類型必須匹配)

Dictionary<string, resultType > dict; 
dyamic value = dict["something"]; 
value.WhaterverYouWant() // if this method doesnt exist this will compile but crash at runtime...