在共享相同接口的类之间进行转换

Caf*_*eek 8 c# casting interface

我有两个接口IHeaderRowIDetailRow

然后我有一个实现RawRow:IHeaderRow,IDetailRow的对象

然后我需要将它转换为实现IHeaderRow的HeaderRow.

但是当我尝试时,它最终会变为空或给出异常.

我可以将ObjectRawRow转换为接口IHeaderRowIDetailRow

var ObjectIHeaderRow = ObjectRawRow as IHeaderRow;
var ObjectIDetailRow = ObjectRawRow as IDetailRow;
Run Code Online (Sandbox Code Playgroud)

但是我不能将ObjectRawRow转换HeaderRow,或者将ObjectIHeaderRow转换HeaderRow.

它抛出错误无法将源类型'IA'转换为目标类型'A'

我需要将它转换为实际的HeaderRow类.

思考?

编辑:

即使设立一个明确的演员照顾这个问题,我认为我会为那些想知道的人提供一个答案,为什么我在做我自己的事.

简而言之,我正在按顺序处理文件.逐行.我将行读入RawRow,直到我看到一些值,我实际上并不知道它将是什么类型的行.然后我想将它转换为正确的类型.

Jef*_*nal 6

您只能隐式地将对象强制转换为它们从中继承或实现的类型 - 因为RawRow它不是从中派生出来的HeaderRow,所以它是不可能的.

根据您的要求,您可以通过编写显式转换运算符,创建HeaderRow接受RawRow其原型的构造函数或通过修改代码来对其进行操作来克服此问题IHeaderRow.