我是新来的。我有一个问题,也许只是简单,但我不能做得好。我班上有几个字段:
public Player player;
public Run run;
代码:
public void doit(string method)
{
foreach (var prop in this.GetType().GetFields())
{
foreach (var meth in prop.FieldType.GetMethods())
{
if (meth.Name == method)
{
meth.Invoke(prop, null);
}
}
}
但是当我尝试运行此问题时,我在运行时遇到错误:
对象与目标类型不匹配。
排队:
meth.Invoke(prop, null);
出现错误,因为“prop”不是Class对象。
当我试图这样做时:
Player testPlayer;
testPlayer = prop;
我有一个错误:
'System.Reflection.FieldInfo'到'WindowsFormsApplication.Player'
我尝试了很多东西,但没有任何效果。 你能帮帮我吗?这对我很重要:))
感谢。
答案 0 :(得分:3)
您正在尝试调用传入实际FieldInfo
对象的方法,而不是该字段的值。
一个简单的解决方法是:
if (meth.Name == method)
{
meth.Invoke(prop.GetValue(this), null);
}
但是,如果您尝试按名称查找方法,则可以采用更简单的方法:
public void doit(string method)
{
foreach (var prop in this.GetType().GetFields())
{
// Get the method by name
var meth = prop.FieldType.GetMethod(method);
if (meth != null)
{
meth.Invoke(prop.GetValue(this), null);
}
}
}
答案 1 :(得分:1)
听起来你需要获得该属性的值:
meth.Invoke(prop.GetValue(this), null);