2012-08-31 77 views
1

我目前的方法例如:在運行時的方法獲取參數值

public void MethodName(string param1,int param2) 
{ 
    object[] obj = new object[] { (object) param1, (object) param2 }; 
    //Code to that uses this array to invoke dynamic methods 
} 

有一個動態的方式(我用反射猜測),將獲得當前執行方法的參數值,並將其放置在一個對象數組?我已經讀過,你可以使用MethodBase和MethodInfo獲取參數信息,但那些只有關於參數的信息,而不是它自己的值,這是我需要的。

因此,例如,如果我通過「測試」和1作爲方法參數沒有編碼的具體參數可以得到一個對象數組有兩個索引{「test」,1}?

我真的很想不必使用第三方API,但如果它有該API的源代碼,那麼我會接受這個答案,只要它不是一個巨大的API,並且沒有簡單的方法不用這個API就可以做到。

我確定必須有一種方法,也許使用堆棧,誰知道。你們是專家,這就是我來這裏的原因。

謝謝你,我迫不及待地想知道這是如何完成的。

編輯

它可能不是很清楚所以這裏一些額外的信息。這個代碼示例就是這樣一個例子,以顯示我想要的。這將是膨脹和大,以顯示實際的代碼,它需要的地方,但問題是如何獲得數組,而無需手動創建一個。我需要一些如何獲取值並將它們放入數組而不編碼特定參數。

+0

這不是真的清楚自己想要什麼。您已經在顯示的代碼中擁有數組中的參數。那有什麼問題? –

+0

你爲什麼需要這個?當你在方法中時,你已經知道參數並且可以很容易地將它們放入數組中(如你的例子所示)。 – xxbbcc

+0

如果你想要的是在數組中接收未知長度的參數列表,則關鍵字'params'可能很有用:'public void MethodName(params object [] parameters)' – YohannP

回答

2

使用反射,你可以提取的參數的名稱和元數據而不是實際值:

class Program 
    { 
     static void Main(string[] args) 
     { 
      Program p = new Program(); 
      p.testMethod("abcd", 1); 
      Console.ReadLine(); 
     } 

     public void testMethod(string a, int b) 
     { 
      System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(); 
      StackFrame sf = st.GetFrame(0); 
      ParameterInfo[] pis = sf.GetMethod().GetParameters(); 

      foreach (ParameterInfo pi in pis) 
      { 
       Console.Out.WriteLine(pi.Name); 
      } 
     } 
    } 
+0

因此,在運行時無法獲取值? –

+0

您可能想要使用類似PostSharp AOP風格的方法, – Spock

相關問題