2011-10-24 11 views
0

としてListオブジェクトによる方法、の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

このコードが発生しやすい潜在的に遅いとエラーになります。だから私はここに大きな写真は何ですか、尋ねる必要がありますか?なぜあなたはこれをしたいのですか?このタイプのコールを貴重なものにしているのは何ですか? – Enigmativity

+0

プログラムのコンセプトでは、ソケット経由でtxt msgを送信することでメソッドを呼びたいと思っています:インスタンス、メソッド、パラメータを送信したいと思います:そして、このようにsthを呼び出します: "instance"。インスタンスはリストの要素になる可能性があります。 – hades

答えて

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); 
    } 
} 
+0

私は、OPが動的にリストを選択し、文字列から項目を索引したがっていると思います。なぜ彼はそれをやりたいのかわかりません。 – Enigmativity

+0

私は呼び出しクラスのインスタンスを除いてのみ文字列で呼び出したいと思います。オブジェクトでこれを行うことができますが、プログラム全体のコンテキストでは文字列ソリューションが必要です。 – hades

関連する問題