调用方法,转换

时间:2014-01-15 19:42:38

标签: c#

我是新来的。我有一个问题,也许只是简单,但我不能做得好。我班上有几个字段:

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'

我尝试了很多东西,但没有任何效果。 你能帮帮我吗?这对我很重要:))

感谢。

2 个答案:

答案 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);