以下代码...
class Repository<T> where T : Func<TIn, TOut>
{
//...
}
导致 VS 抱怨“找不到类型或命名空间名称 'TIn'/'TOut'”。
有没有办法做到这一点?
如果Func
它本身是一个泛型类,那么是的,你可以通过:
class Repository<T, TIn, TOut> where T: Func<TIn, TOut>
但是,您不能这样做,Func
因为它只能受接口/非密封类或类型参数的约束。
作为替代方案,您可以将Func
in 作为构造函数参数传递,它会起作用,即
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' 不是有效的约束。用作约束的类型必须是接口、非密封类或类型参数。