我们有这样一个类和方法
public class TestClass
{
public void Swap<T>(ref T first, ref T second)
{
T tmp = second;
second = first;
first = tmp;
}
}
我正在尝试使用反射并调用方法
[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要调用此方法的对象作为第一个参数传递。它必须是您正在调用其方法的类的对象:或者您可以将方法更改为静态并将其
null作为第一个参数传递:顺便说一句,MSDN
Invoke详细描述了它在哪些情况下会抛出TargetException. 标准文档使查找错误原因变得更加容易:)