2009-11-20 39 views
2

我需要將所有功能參數記錄在十幾個函數中。如何查找功能參數

是否有一種方法可以在語法上確定所有參數及其值(或至少是它們的.ToString()值)?也許通過反思?

回答

1

據我所知沒有辦法使用反射來動態地列出和確定局部變量的值。您可以使用反射來獲取有關方法參數的類型信息,但只有聲明爲類型 - 您無法自動獲取有關實際參數的信息,因爲反射元數據提供有關方法定義的信息,而不是特定值在運行時傳遞給它。

你可以,但是,做這樣的事情:

static class Extensions 
{ 
    public static string GetTypeAndValue(this object obj) 
    { 
     return String.Format("{0}: {1}", obj.GetType().Name, obj.ToString()); 
    } 
} 

然後,要在其中執行記錄每一個方法中,這樣做

private void SomeMethodToBeLogged(string some_string, int some_int, bool some_bool) 
{ 
    Logger.Log(String.Format("SomeMethodToBeLogged({0}, {1}, {2})", 
     some_string.GetTypeAndValue(), 
     some_int.GetTypeAndValue(), 
     some_bool.GetTypeAndValue())); 
} 
+0

obj.GetType()。Name生成Type的名稱,而不是變量的名稱(這是我需要的)。 – AngryHacker 2009-11-20 22:44:40

+0

......並且你不能得到,除非你真的編寫代碼來完成它,也就是記錄變量名和它的值,或者讓別人去做,就像這裏有關PostSharp的其他答案一樣。反射查看元數據,類等,而不是在實際情況下以及它們的當前屬性(如參數值等) – 2010-05-29 20:04:17