2011-12-23 66 views
0

我有以下問題:列表不同泛型類型,動態鑄造

  • 我需要存儲與不同類型的參數,像javish Sth<A,?>通用對象,
  • 「?」類型通常是原語,所以不是真正可擴展的/可更換
  • 我需要我的列表中的每個元素上執行一些方法對不同類型的這些方法
    • 不同的方法,或者至少不同的重載

雖然我不知道如何存儲這種類型,但爲簡單起見,我們假設List<object>

我可以將問題的類型存儲在某個地方(List<KeyValuePair<Type,object>>),用typeof()獲得它,但是,如何才能將對象恢復爲所需的類型? 喜歡的東西

foreach(var entry in myList) 
{ 
    var obj = (Sth<A, entry.Key>) entry.Value; 
    myMethod(obj); //This can have overloads for object, Sth<A,int>, Sth<A,string>, 
        // etc. Generally, I need a correct type of obj here. 
} 

當然myMethod<T>是一個通用庫方法有太多的過載到的if-else它obj is Sth<A, uint> ...

我想我可以創建基於entry.Key一個新的對象,然後填寫

這樣的組合類型甚至可能嗎?

我相信,答案在於正確創建myList,但我不知道該怎麼做。

任何幫助,將不勝感激!

聖誕快樂!:)

+0

'myMethod'做什麼?在某些時候,你是否不得不將這個對象轉換成有意義的東西來使用它? – 2011-12-23 14:21:43

+0

嗯,這個'myMethod'事實上並不是我的;]問題是我不知道源代碼,不能說哪種類型是重要的。 – 2012-01-11 22:26:14

回答

6

如果您正在使用C#4,你可以使用dynamic此:

foreach (KeyValuePair<A, object> entry in myList) 
{ 
    dynamic value = entry.Value; 
    myMethod(value); 
} 

的重載現在將在執行時根據所執行的時間進行類型爲value

+0

這樣做。感謝您的幫助(對於遲到的回覆感到抱歉),這種動態的東西對我來說是新的。但它看起來正是我所期待的。 – 2012-01-11 22:25:03