Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型约束中的泛型_C#_Generics_Constraints - Fatal编程技术网

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
的一部分,而是另一个类上的一个方法