使用PrivateObject.调用静态转换函数不能在c#中编译

本文关键字:编译 不能 函数 PrivateObject 调用 静态 转换 使用 | 更新日期: 2023-09-27 18:18:42

我有一个测试方法,我调用一个私有函数,将一种类型转换为另一种类型。

这个静态函数有以下签名:

private static Destiny[] Array2Array<Origin,Destiny> (Origin[] OriginVector)

因为它是一个私有函数,测试人员给出了一个错误,说它不能访问它。所以我到了这一步:

Origin[] OriginVector = null; // TODO: Initialize to an appropriate value
Destiny[] expected = null; // TODO: Initialize to an appropriate value
Destiny[] actual;
var dummy = new ConversionClass();
var po = new PrivateObject( dummy, new PrivateType(typeof(ConversionClass)));
var acessor = new ConversionClassAcessor(po);
actual = po.Invoke("Array2Array", 
         new [] { typeof(Origin[]), typeof(Destiny[]) }, 
         new object[] { OriginVector } );

编辑:最后一行抛出编译器错误,提示"不能将类型对象转换为Destiny[]"。我做错了什么?

使用PrivateObject.调用静态转换函数不能在c#中编译

答案很简单…把它。: D

actual = (Destiny[]) po.Invoke("Array2Array", 
     new [] { typeof(Origin[]), typeof(Destiny[]) }, 
     new object[] { OriginVector } );

Chris Shain先生,

我将在这里重现你给我的解决方案。因为你已经删除了你的答案,如果你在这之后添加一个新的,我将删除这个,并接受你的作为问题的答案。
上面代码的问题是actual变量的类型是Destiny[],调用的结果是System.Object。需要进行类型转换:
actual = (Destiny[]) po.Invoke("Array2Array", 
         new [] { typeof(Origin[]), typeof(Destiny[]) }, 
         new object[] { OriginVector } );