C#/ Unity Reflection:TargetException:Object与目标类型不匹配

时间:2016-11-26 11:01:53

标签: c# unity3d reflection

当我尝试运行以下代码时,mi.Invoke行上出现错误,说“TargetException:Object与目标类型不匹配。”

我已经在SO上看到了其他答案,他们都说这是一个问题,第一个参数是Invoke是“this”而不是类型本身,这不是这里的情况。

MethodInfo创建行和调用行都使用相同的变量“type2”,但它说它们是不同的。如何解决此错误?

//In this example VoxelType is "ConveyorBelt". This is a class with a public Update method, in the same namespace.
Type type2 = getTypeByName (VoxelType)[0]; //Get voxel type
print (type2.Namespace); //Returns null
print (VoxelType); //Returns ConveyorBelt
print (type2);//Returns ConveyorBelt
MethodInfo mi = type2.GetMethod ("Update");
mi.Invoke (type2, null); //Crashes everytime with TargetException

1 个答案:

答案 0 :(得分:0)

它无法工作的原因是因为我试图使用类调用非静态方法,而不是实例。下面的代码修正了它:

Type type2 = getTypeByName(NameOfClass)[0]; //Get voxel type
MethodInfo mi = type2.GetMethod(NameOfNonStaticMethod);
object instance = Activator.CreateInstance(type2);
mi.Invoke(instance, new object[] { Parameters });

解决这个问题需要很长时间,因为c#给出了一个完全无关的拒绝运行的借口。