【问题标题】:C# - Cast instance to generic interface returns null [closed]C# - 将实例转换为通用接口返回 null [关闭]
【发布时间】:2016-05-22 09:29:48
【问题描述】:

我有以下方法:

IResponseToModelConverter<U, IEntity> CreateConverter()
{ 
return new ResponseToItemConverter() as IResponseToModelConverter<U, IEntity>;
}

ResponseToItemConverter 继承自实现IResponseToModelConverter 的基类。 ItemIEntity 的类型,我可以得到U 的类型。 有没有办法让它工作?

【问题讨论】:

  • 如果 ResponseToItemConverter 没有直接实现这个接口,那么不,你不能。 C# 中没有鸭子打字。
  • 它继承自实现接口的基类。我忘了提。
  • 如果U 是具体类型并且ResponseToItemConverter 碰巧实现了接口IResponseToModelConverter&lt;U, IEntity&gt;,或者在泛型类型参数@987654330 的情况下,它只会返回非空值@ 作为类实现相同接口的类型传入。
  • 但是您必须发布围绕方法 CreateConverter 的类,以及接口和 ResponseToItemConverter 类以获得更好的答案。
  • @user6251216 不,它不继承自实现接口的基类。如果是这样,您就不会问这个问题,因为您不会得到null 结果。也许基类实现了一些其他的IResponseToModelConverter&lt;,&gt; 实例化,但不是您要求的。

标签: c# oop generics


【解决方案1】:

我将 IEntity 替换为类型参数 T(带有 IEntity 约束),因此当我强制转换为接口时,我可以传递一个具体的类。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2019-11-01
    相关资源
    最近更新 更多