使用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[]"。我做错了什么?
答案很简单…把它。: 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 } );