通过List对象调用方法作为字符串

时间:2011-10-24 02:15:50

标签: c#

我想通过方法的字符串数据和对象/类,params,...从列表中的对象调用方法。

class MyClass{
    List<Element> elements = new List<Element>();
    public MyClass(){        
        elements[0] = new Element();
        //elements[0].MyMethod();

        InvokeMet(this, "MyMethod", "elements[0]")
    }
}
class Fun()
{
    public static void InvokeMet(object obj, string method, string instance)
    {
        string[] par = {};
        string[] instance_array = instance.Split(new char[] { '[', ']' });    
        object instanceObjectList = obj.GetType().GetField(instance_array[0]).GetValue(obj);
        object instanceObject = ((List<Element>)instanceObjectList)[Convert.ToInt32(instance_array[1])];            
        MethodInfo mi = instanceObject.GetType().GetMethod(method);
        mi.Invoke(instanceObject, par);
    }
}

它正在工作,但我希望列表的类型是动态的,例如。从对象

获得
object instanceObject = ((List<instanceObjectList.GetType().GetGenericArguments()[0]>)instanceObjectList);

或者它可以从字符串中获取

String cl = "Element";
object instanceObject = ((List<typeFromString(cl)>)instanceObjectList);

我该怎么办? 也许它可以完全不同的方式完成?

1 个答案:

答案 0 :(得分:1)

为什么不这样做呢:

class MyClass
{
    List<Element> elements = new List<Element>();
    public MyClass()
    {
        elements[0] = new Element();
        //elements[0].MyMethod();

        Fun.InvokeMet(elements[0], "MyMethod");
    }
}
class Fun
{
    public static void InvokeMet(object obj, string method)
    {
        string[] par = { };
        MethodInfo mi = obj.GetType().GetMethod(method);
        if (mi != null)
            mi.Invoke(obj, par);
    }
}