2010-08-15 124 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