Использование PrivateObject.Invoke для вызова функции статического преобразования не компилируется в C # - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть тестовый метод, в котором я вызываю закрытую функцию, которая преобразует тип в другой тип.

Эта статическая функция имеет следующую сигнатуру:

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 []».Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Ответ прост .. бросьте его. : D

actual = (Destiny[]) po.Invoke("Array2Array", 
     new [] { typeof(Origin[]), typeof(Destiny[]) }, 
     new object[] { OriginVector } );
0 голосов
/ 23 декабря 2011

Мистер Крис Шейн,

Я воспроизведу решение, которое вы мне дали. Поскольку вы удалили свой ответ, если вы добавите новый после этого, я удалю его и приму ваш в качестве ответа на вопрос.


Проблема с кодом выше в том, что переменная actual имеет тип Destiny[], а результат Invoke равен System.Object . Требуется Typecast:

actual = (Destiny[]) po.Invoke("Array2Array", 
         new [] { typeof(Origin[]), typeof(Destiny[]) }, 
         new object[] { OriginVector } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...