2011-09-21 75 views
1

在PHP中,你可以得到該方法的定義的變量爲數組:c#將方法中的變量定義爲列表 - 是否有可能?

function test($a,$b){ 
    print_r(
     get_defined_vars() 
); 
} 

是否有可能在C#?

+0

你能詳細點嗎? – Scott

+0

[get_defined_vars](http://php.net/manual/en/function.get-defined-vars.php)返回當前作用域中的所有變量,包括參數和全局變量。謝天謝地,C#沒有任何相似之處。實際上,「範圍」在運行時並不像在編譯時或PHP中那樣存在。你究竟想要做什麼?有可能是一個很好的方法來做到這一點... – Kobi

+0

@Kobi - 我有很多參數的WebService方法,我想轉換它作爲一個列表,並驗證它們以外,如果web服務。我不想一次又一次地重新聲明它們。 Toda – SexyMF

回答

2

您可以使用反射。

如果你想這樣做在線,那麼你首先需要確定的方法,你目前在

var currentMethod = System.Reflection.MethodInfo.GetCurrentMethod(); 

然後你可以檢索方法的參數:

foreach(ParameterInfo parameter in currentMethod.GetParameters()) 
{ 
    var name = parameter.Name; 
    //... 
} 
+0

get_defined_vars()包含方法參數,但不限於此。 –

+0

Idd,它獲取調用範圍內的變量(http://be2.php.net/manual/en/function.get-defined-vars.php)。看看OP的問題,獲取當前方法的參數應該足夠了。 –

3

東西像...

string a = "hello"; 
int b = 20; 
DateTime c = DateTime.Now; 

foreach (LocalVariableInfo variable in MethodInfo.GetCurrentMethod().GetMethodBody().LocalVariables) 
{ 
    Console.WriteLine(variable); 
} 
+0

就我所知,甚至沒有包含變量的名稱和值,並且引用了編譯後的代碼,它可能有額外的變量(例如IEnumerator和變量集合) – Kobi

+0

+1;可能要附加的方法參數,[ala Christophe的答案](http://stackoverflow.com/questions/7495903/c-defined-variables-in-a-method-as-a-list-is-it-可能/ 7495977#7495977)。 –

相關問題