Имеем такой класс и метод
public class TestClass
{
public void Swap
Пытаюсь задействовать рефлексию и вызвать метод
[TestMethod]
public void InvokeGenericMethod()
{
MethodInfo method = typeof(TestClass).GetMethod("Swap");
MethodInfo methodWithInt = method.MakeGenericMethod(typeof(int));
int one = 1;
int two = 2;
object[] arguments = { one, two };
methodWithInt.Invoke(this, arguments);//здесь ошибка
Assert.AreEqual(one, 2);
}
и получаю ошибку {"Объект не соответствует конечному типу."}
Как это делается? Гуглеж приводил к примерам с одним параметром out и чего-то все вызывалось как обычно, т.е. массив аргументов создавался как у меня, а далее обычный вызов через Invoke(). Какие идеи?
Ответ
Вы вызываете нестатический метод, и должны передать в качестве первого аргумента Invoke объект, у которого вы этот метод хотите вызвать. И это должен быть объект того класса, метод которого вы вызываете:
methodWithInt.Invoke(new TestClass(), arguments);
Или вы можете поменять метод на статический, и передавать null в качестве первого аргумента:
public class TestClass
{
public static void Swap
methodWithInt.Invoke(null, arguments);
Кстати, в MSDN по Invoke подробно расписано, в каких случаях он бросает TargetException. Стандартная документация значительно облегчает поиск причины ошибки :)
Комментариев нет:
Отправить комментарий