2012-01-05 44 views
4

試想在一個類中你得到了這個方法:如何獲取數組中的方法參數?

float Do(int a_,string b_){} 

我試圖做這樣的事情:

float Do(int a_, string b_) 
{ 
    var params = GetParamsListOfCurrentMethod(); //params is an array that contains (a_ and b_) 
} 

有人能幫忙嗎?

我爲什麼要這樣做?

想象一下,你得到了一個接口:由於接口constains一個

public class MasterTrucMuch : ITrucMuch 
{ 
    public floatDo(int a_, string b_) 
    { 
    ITrucMuch tm = Factory.GetOptimizedTrucMuch(); // This'll return an optimized trucMuch based on some state 
    if(tm != null) 
    { 
     return tm.Do(a_,b_); 
    } 
    else 
    { 
     logSomeInfo(...); 
    } 

    //do the fallback method 
    } 

public Interface ITrucMuch 
{ 
float Do(int a_,string b_); 
// And much more fct 
} 

和實現接口

而且還實現接口的特殊類大量類很多方法和作爲所有方法的第一個留置都是一樣的(檢查是否有更好的接口,即當前實例,如果是這樣,調用相同的方法在實例)我嘗試做一個方法。

THX

+0

你看過一個.NET反射查看方法及其參數@運行時? – 2012-01-05 13:49:59

+8

爲什麼?如果你解釋想要這樣做的原因,可能會有更好的解決方案。 – Yuck 2012-01-05 13:51:14

+1

你想要的值或名稱?或兩者。你有什麼機會想要登錄它們? – Ray 2012-01-05 13:52:36

回答

0

你可以寫動態參數的功能是這樣的:

protected void Do(params object[] list) 
    { 
      if (list.Length < 2) 
       return; 

      int a_=(int)list[0]; 
      string b_=list[1].ToString(); 
    } 
1
var params = GetParamsListOfCurrentMethod(); 

params爲C#的關鍵字,因此不能用作上面一個變量名。

下面是關於如何使用params關鍵字 http://msdn.microsoft.com/en-us/library/w5zay9db.aspx

而且一些示例代碼拉到形式的文章的鏈接。

public static void UseParams(params int[] list) 
{ 
    for (int i = 0; i < list.Length; i++) 
    { 
     Console.Write(list[i] + " "); 
    } 
    Console.WriteLine(); 
} 
+0

當然,如果我可以改變方法的簽名,那將是非常簡單的...但我不能。 – 2012-01-05 13:54:11

+1

@PitMing對不起,我誤解了你的問題。你的目標究竟是什麼? – user1231231412 2012-01-05 13:55:27

+1

如果一個人絕對必須:'var @params = GetParamsListOfCurrentMethod();' – 2013-09-26 20:19:42

11

你可以做這樣的事情:

var parameters = MethodBase.GetCurrentMethod().GetParameters(); 
foreach (ParameterInfo parameter in parameters) 
{ 
    //.. 
} 

看一看的ParameterInfo類。

相關問題