【发布时间】:2014-04-29 14:04:29
【问题描述】:
我遇到了类似 Cheva 在他的问题中遇到的问题:
How to cast System.Object[*] to System.Object[]
我通过 COM 互操作功能使用外部库 (Reuters EIKON API)。
提交请求后,对象会更新,其数据成员也会更新。对象目录为 Data 成员显示了这一点:
public virtual dynamic Data { get; }
在debug模式下,我可以看到,提交请求后,DataStatus变成了dataset_full,Data成员实际上已经被填充了。
数据成员显示为 {object[1..31]},我可以从调试下拉菜单中看到,这个集合中实际上有一个字符串。
我的问题是我无法访问这个对象。我可以将其转换为 object[] 或 string[] 或任何其他内容。我什至无法找出它的类型。
它总是说System.Object[*] 不能转换为System.Object[]
如果我尝试使用 .Type() 找出类型,我会得到“System.Reflection.TargetInvocationException”。我什至无法访问它的长度,这也给了我错误
System.InvalidCastException -> Object of Type "System.Object[*]" cannot be cast to type "System.Object[]"
有人见过类似的错误吗?
【问题讨论】:
-
您能否附上您用于投射的代码,以便我们查看您的尝试?
-
您是否尝试将动态投射到对象[]?
-
它是一个下界不为 0 的不一致数组。在 COM 互操作中并不少见,从 1 开始是相当典型的。您只能转换为(数组)。并使用它的 GetLowerBound() 方法知道从哪里开始索引,GetUpperBound() 知道在哪里停止,GetValue() 来读取一个元素。
-
我在这里工作 VSTO 时遇到了完全相同的问题。 Excel.Filter.Criteria1 是动态的,过滤器返回一个“object []”,但行为与您所说的完全一样。不能循环,没有方法、属性、字段、成员,什么都没有。一旦动态拥有它,它就不能存储在另一个动态对象上。明智地使用你的 1 枪!
标签: c# casting com-interop