泛型方法类型不能用作泛型类的泛型类型

威利旺卡

我想实现一个通用方法,该方法应该创建一个双通用对象的实例。应该实例化的这个类的泛型类型是另一个类和第一个类型必须实现的接口。当我在具有泛型类型的泛型方法中调用 new 时,CS0311即使我将类型正确地限制到我的基本接口,我也会收到编译器错误为什么我不能创建这样的实例?

class Program
{

    static void Main(string[] args)
    {
        GetQuery<ITESTEntity>();
    }

    static void GetQuery<I>() where I : IEntityBase
    {
        var qry = new myQuery<TESTEntity, I>();
    }
}

class myQuery<T, I> 
    where T : class, I
    where I : IEntityBase
{

}
编码器

假设你有这些定义:

interface IEntityBase { }

interface ITESTEntity : IEntityBase { }

class TESTEntity : ITESTEntity { }

那么你的问题源于这里:

class myQuery<T, I> 
    where T : class, I
    where I : IEntityBase

您是说T必须可以分配给I,并且I必须可以分配给IEntityBase没关系,但在这里:

static void GetQuery<I>() where I : IEntityBase
{
    var qry = new myQuery<TESTEntity, I>();

您正在接受任何I可分配给IEntityBase. 所以你也可以这样称呼它:

interface ITESTEntity2 : IEntityBase { }

class TESTEntity2 : ITESTEntity2 { }

GetQuery<ITESTEntity2>();

这个调用是有效的,但现在在你的方法中GetQuery()

new myQuery<TESTEntity, I>();

Iwill ITESTEntity2TESTEntity不可分配给。它不能被保证TESTEntity是分配给任何I其中I可分配给IEntityBase,如以上所证实ITESTEntity2

所以重新考虑你的设计。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章