gpt4 book ai didi

c# - 在共享相同接口(interface)的类之间进行转换

转载 作者:太空狗 更新时间:2023-10-29 18:19:26 26 4
gpt4 key购买 nike

我有两个接口(interface) IHeaderRowIDetailRow

然后我有一个同时实现 RawRow:IHeaderRow, IDetailRow

的对象

然后我需要将其转换为实现 IHeaderRowHeaderRow

但是当我尝试时,它最终为 null 或给出异常。

我可以将 ObjectRawRow 转换为接口(interface) IHeaderRowIDetailRow

var ObjectIHeaderRow = ObjectRawRow as IHeaderRow;
var ObjectIDetailRow = ObjectRawRow as IDetailRow;

但我无法将 ObjectRawRow 转换为 HeaderRow ,或将 ObjectIHeaderRow 转换为 HeaderRow

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

我需要将其转换为实际类 HeaderRow

想法?

编辑:

尽管设置显式类型转换可以解决这个问题,但我想我会为想知道我为什么要这样做的人提供一个答案。

简而言之,我正在按顺序处理一个文件。逐行。我将该行读入 RawRow,直到我查看一些值,我才真正知道它将是什么类型的行。然后我想将其转换为正确的类型。

最佳答案

您只能将对象隐式转换为它们继承或实现的类型 - 因为 RawRow 不是从 HeaderRow 派生的,所以这是不可能的。

根据您的要求,您可以通过编写 explicit conversion operator 来解决这个问题,创建接受 RawRow 作为其原型(prototype)的 HeaderRow 构造函数,或者通过修改代码以对 IHeaderRow 进行操作。

关于c# - 在共享相同接口(interface)的类之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2648308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com