2013-08-23 63 views
1

找不到方法,我開始認爲這是不可能的,但以防萬一我會在這裏問。通用類型的泛型類訪問類型參數

更好地解釋代碼..

我有這個通用類的定義,我想能夠訪問List的類型參數,所以我可以定義接受字符串的GenericClassOfGenericType的方法(取自列表的類型參數)

//class definition 
public class GenericClassOfGenericType<TGeneric>{ } 

var instance = new GenericClassOfGenericType<List<string>>(); 

我試過類似的東西;

public class GenericClassOfGenericType<TGeneric<TValue>> { 
public void ProxyAdd(TValue value){ } 
} 

但是,這並不工作,無法找到谷歌類似的事情。

我可以在GenericClassOfGenericType中添加第二個類型定義,並在構造函數中添加一個驗證器,以確保泛型列表具有第二個類型作爲類型參數,但它根本感覺不太好。

[編輯] 也找不到一個約束,迫使你指定一個泛型類型作爲參數(有意義的泛型也是強類型,但它使我認爲這是不可能的)。

+0

有什麼特別的原因,你需要指定它的「清單」的一部分?爲什麼不只是'GenericClassOfGenericType '?讓它處理它需要的任何「List 」的內部結構。我的意思是,你希望傳入List的某個子類或者'ICollection'或'IList'的不同實現嗎? –

回答

2

怎麼樣:

public class GenericClassOfGenericType<TGeneric, TValue> 
    where TGeneric : IList<TValue> 
+0

謝謝,但這是我的最後一個選項,因爲它迫使你指定類型參數的類型參數,仍然比在構造函數中檢查更好:P –

+0

來自MDSN泛型文檔: 「類型參數與泛型類的約束非常有用因爲編譯器可以不考慮類型參數,只是它來自System.Object。使用類型參數作爲您希望在兩個類型參數之間執行繼承關係的場景中的泛型類的約束。 我想這是同樣的問題,所以我想我將你的答案標記爲解決方案並繼續前進。 謝謝。 –