繁体   English   中英

如何在通用类声明中使用通用类型?

[英]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)
    {

    }
}

您必须在类的定义中指定TInTOut的“输入”,否则,编译器将无法确定从何处获取该输入

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM