【发布时间】:2013-03-27 15:33:48
【问题描述】:
我有一个类MockRepository,它实现了接口IRepository,我有一个类Technology,它实现了接口IIdentifiable。
我想将一个对象从MockRepository<Technology> 转换为IRepository<IIdentifiable>,并在一些操作完成后再次转换回来。这可能吗?我的代码可以编译,但是当我尝试运行它时,我得到一个无效的强制转换异常。
【问题讨论】:
-
你为什么要这样做?
-
为了澄清@antonijn 的问题,为什么需要强制转换这些对象?
MockRepository已经是IRepository,所以你得到了所有的IRepository功能,而Technology是IIdentifiable,所以你也得到了那个接口实现。也许如果您向我们展示您是如何使用它们的,以及您试图通过这种转换完成什么,我们可以为您提供更多帮助。 -
通常你可以使用
MockRepository<Technology>在你想转换为IRepository<IIdentifyable>的所有情况下,它应该可以在没有先转换的情况下工作。如果还有其他原因,请提供一些代码来澄清您的问题。 -
将其作为参数传递给将
IRepository<IIdentifiable>作为参数类型的函数。如果我将参数类型定义为MockRepository<Technology>,那么我不能将它用于实际的存储库对象和我们从存储库获得的其他可识别对象 -
问题必须包含相关的代码位和完整的错误信息。事实上,很难正确回答。类定义会有所帮助。请记住,通用集合不可互换,因此
和 构成了两种不同的集合类型。
标签: c# generics interface casting