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

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


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

{


}


HUWWW
浏览 117回答 1
1回答

撒科打诨

假设您有这些定义:interface IEntityBase { }interface ITESTEntity : IEntityBase { }class TESTEntity : ITESTEntity { }那么你的问题就出自这里:class myQuery<T, I>&nbsp;&nbsp; &nbsp; where T : class, I&nbsp; &nbsp; where I : IEntityBase您声明T必须可分配给I,并且I必须可分配给IEntityBase。没关系,但是这里:static void GetQuery<I>() where I : IEntityBase{&nbsp; &nbsp; var qry = new myQuery<TESTEntity, I>();您接受任何I可分配给 的内容IEntityBase。所以你也可以这样称呼它:interface ITESTEntity2 : IEntityBase { }class TESTEntity2 : ITESTEntity2 { }GetQuery<ITESTEntity2>();此调用是有效的,但现在在您的方法中GetQuery():new myQuery<TESTEntity, I>();I将是ITESTEntity2,TESTEntity不可分配给它。不能保证 可以TESTEntity分配给任何可分配给 的I位置,如上面使用 演示的那样。IIEntityBaseITESTEntity2所以重新考虑你的设计。
打开App,查看更多内容
随时随地看视频慕课网APP