1 回答

TA贡献1934条经验 获得超2个赞
假设您有这些定义:
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>();
I将是ITESTEntity2,TESTEntity不可分配给它。不能保证 可以TESTEntity分配给任何可分配给 的I位置,如上面使用 演示的那样。IIEntityBaseITESTEntity2
所以重新考虑你的设计。
- 1 回答
- 0 关注
- 130 浏览
添加回答
举报