2012-05-18 36 views
0

假設你有一個MethodInfo的有關方法myMethod的:獲取MethodInfo的簽名

void myMethod(int param1, int param2) { } 

,你想創建一個表示方法簽名的字符串:

string myString = "myMethod (int, int)"; 

通過的MethodInfo參數循環,我可以通過調用參數類型的ToString方法來實現這些結果:

"myMethod (System.Int32, System.Int32)" 

我該如何改進併產生上述結果?

+0

'myMethod'的情況不應該改變 - 你只是指'Sysetm.Int32'與'int'部分? –

+0

對不起,這是一個現在已經修復的錯字。是的,我的問題是按照聲明的方式顯示類型的名稱。我想知道是否有比每種類型的字符串硬編碼更好的解決方案。 – Abdulla

回答

0

這個問題已經被問過了,它可以通過CodeDom api完成。見thisthis。請注意,這些關鍵字(int,bool等)是特定於語言的,因此如果您要爲通用.NET消費者輸出這些關鍵字,則通常首選框架類型名稱。

0

據我所知,沒有任何內置的,將原始(System.Int32)的真正類型名稱轉換爲內置別名(int)。由於只有一個這些別名的極少數,這不是太難寫你自己的方法:

public static string GetTypeName(Type type) 
{ 
    if (type == typeof(int)) // Or "type == typeof(System.Int32)" -- same either way 
     return "int"; 
    else if (type == typeof(long)) 
     return "long"; 
    ... 
    else 
     return type.Name;  // Or "type.FullName" -- not sure if you want the namespace 
} 

話雖這麼說,如果用戶實際System.Int32而非int(沒有類型的課程將是完全合法的)這種技術仍然會打印出「int」。對此你可以做的不多,因爲System.Type是同樣的 - 所以你無法找出用戶實際輸入的變體。

+0

IIRC CodeDom中有一些可以做到這一點的東西。 – leppie