C# 类型约束中的泛型
我正在和一些泛型药作斗争。 以下是我的设置:C# 类型约束中的泛型,c#,generics,constraints,C#,Generics,Constraints,我正在和一些泛型药作斗争。 以下是我的设置: interface I<T> { } [...] void Add<T>(T obj) where T : I<??> { } 接口I{} [...] void Add(T obj),其中T:I{} 如何确保Add方法中的T实现I?您还需要传递T参数进行添加 void Add<TI, TAny>(TI obj) where TI : I<TAny> void Add(TI obj),
interface I<T> { }
[...]
void Add<T>(T obj) where T : I<??> { }
接口I{}
[...]
void Add(T obj),其中T:I{}
如何确保
Add
方法中的T
实现I
?您还需要传递T参数进行添加
void Add<TI, TAny>(TI obj) where TI : I<TAny>
void Add(TI obj),其中TI:I
以下签名将允许Add
使用任何类型参数获取实现I
的任何T
void Add<T,S>(T obj) where T : I<S> {
}
void Add(T obj),其中T:I{
}
使用此方法签名的缺点是类型推断不起作用,您必须指定all类型参数,这看起来非常愚蠢:
blah.Add<I<int>, int>(iInstance);
blah.Add(instance);
更简单的方法是使用以下签名:
void Add<T>(I<T> obj) {
}
void Add(I obj){
}
TI
是泛型参数,而不是泛型本身,因此您不能执行TI
。您的参数不应该是TI
?您的约束应该是,其中T:I
void Add(I obj)
完成了它。谢谢抱歉-Add
不是接口I
的一部分,而是另一个类上的一个方法