[英]How do I use a generic type within a generic class declaration?
以下代码...
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
使VS抱怨“找不到类型或名称空间名称'TIn'/'TOut'”。
有什么办法吗?
如果Func
本身是泛型类,则可以通过以下方式进行:
class Repository<T, TIn, TOut> where T: Func<TIn, TOut>
但是,您无法使用Func
进行此操作,因为它只能受到接口/非密封类或类型参数的约束。
作为替代方案,您可以将Func
作为构造函数参数传入, 它将起作用,即
class Repository<TIn, TOut>
{
public Repository(Func<TIn, TOut> func)
{
...
}
}
不确定是否会给您带来什么。
由于您已经知道所需的类型,因此无需对其施加约束。 我认为您想要的是:
class Repository<TIn, TOut>
{
public void someMethod(Func<TIn, TOut> func)
{
}
}
您必须在类的定义中指定TIn
和TOut
的“输入”,否则,编译器将无法确定从何处获取该输入
class Repository<T, TIn, TOut> where T : Func<TIn, TOut>
{
//...
}
您不能将类型T
约束为Func,因为您只能将类型约束为接口,非封闭类或类型参数。
如果可以做到,它将如下所示:
class Repository<T, TIn, Tout> where T: Func<TIn, TOut>
{
//...
}
但是不允许您使用Func<>
,所以整件事注定了。
来自编译器的错误消息是:
错误1'System.Func'不是有效的约束。 用作约束的类型必须是接口,非密封类或类型参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.