【发布时间】:2011-02-08 13:12:59
【问题描述】:
我有两个接口IHeaderRow和IDetailRow
然后我有一个同时实现 RawRow:IHeaderRow, IDetailRow
的对象然后我需要将其转换为实现 IHeaderRow 的 HeaderRow。
但是当我尝试时,它最终会为 null 或给出异常。
我可以将 ObjectRawRow 转换为接口 IHeaderRow 或 IDetailRow
var ObjectIHeaderRow = ObjectRawRow as IHeaderRow;
var ObjectIDetailRow = ObjectRawRow as IDetailRow;
但我不能将 ObjectRawRow 转换为 HeaderRow ,或将 ObjectIHeaderRow 转换为 HeaderRow。
它抛出错误无法将源类型“IA”转换为目标类型“A”
我需要将它转换为实际的类HeaderRow。
想法?
编辑:
尽管设置一个明确的演员阵容解决了这个问题,但我想我会为那些想知道为什么我要做我所做的事情的人提供一个答案。
简而言之,我正在按顺序处理一个文件。逐行。我将该行读入 RawRow,直到我查看一些值之前,我实际上并不知道它将是什么类型的行。然后我想将它转换为正确的类型。
【问题讨论】:
-
ObjectRawRow声明的类型是什么? -
@SLaks,ObjectRawRow 是 RawRow(实现了 IHeaderRow 和 IDetailRow)
-
一个更好的方法可能是简单地让 RawRow 实例化适当的实例(像 Factory 一样),如果您愿意,可以使用复制构造函数。