我想通过方法的字符串数据和对象/类,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);
我该怎么办? 也许它可以完全不同的方式完成?
答案 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);
}
}