2010-08-15 222 views
4

我正在努力與一些泛型。 以下是我的設置:類型約束中的泛型

interface I<T> { } 

[...] 
void Add<T>(T obj) where T : I<??> { } 

我如何能確保TAdd方法實現I

+0

對不起 - 'Add'不是接口的一部分'I'但在不同的類 – 2010-08-15 13:17:19

回答

8

下面的簽名將允許Add採取實現I<>與任何類型參數的任何T

void Add<T,S>(T obj) where T : I<S> { 
} 

使用這種方法簽名的缺點是,類型推斷不踢,你必須指定所有類型的參數,它看起來荒唐透頂:

blah.Add<I<int>, int>(iInstance); 

一個更簡單方法是使用下面的簽名:

void Add<T>(I<T> obj) { 
} 
+0

'void Add (I obj)'做到了。謝謝! – 2010-08-15 13:14:37

1

您還需要傳遞T參數才能添加。

void Add<TI, TAny>(TI obj) where TI : I<TAny> 
+0

的方法'TI'是一個通用的參數,而不是一個通用的參數,所以你不能'TI '。你的參數不應該只是'TI'嗎?而你的約束應該是'where T:I '。 – 2010-08-15 13:10:19