2012-07-31 160 views
5

,如果我有使用反射

class A 
{ 
    public void DoStuff() 
    { 
     B b; 
    } 
} 

struct B {} 
struct C {} 

,我有typeof(A)確定在C#中使用某種類型的所有類型,

我想獲得在此使用A.所有類型的列表如果是typeof(B)而不是typeof(C)

有沒有一個很好的方法來做到這一點與反思?

+2

這是很容易通過'Type.GetFields','Type.GetProperties'(或'Type.GetMembers')等獲得各類A'的'的_members_的上。但搞清楚什麼類型在本地使用_方法?不太確定。 – 2012-07-31 11:34:56

+0

運行時需要這個嗎?你有權訪問代碼,還是隻有Type? – Martin1921 2012-07-31 11:37:43

+0

類似SO問題:http://stackoverflow.com/questions/1975702/net-reflection-find-used-types – VS1 2012-07-31 11:40:29

回答

8

您需要查看MethodBody類(鏈接中有一個非常好的示例)。這將讓你寫的代碼,如:

MethodInfo mi = typeof(A).GetMethod("DoStuff"); 
MethodBody mb = mi.GetMethodBody(); 
foreach (LocalVariableInfo lvi in mb.LocalVariables) 
{ 
    if (lvi.LocalType == typeof(B)) 
     Console.WriteLine("It uses a B!"); 
    if (lvi.LocalType == typeof(C)) 
     Console.WriteLine("It uses a C!"); 
} 
+0

對不起,如果它不明確從帖子。我不想知道B和C存在的事實。如果A也使用D,我也想找出答案。 – 2012-07-31 17:53:46

+0

正如你在我的代碼中看到的那樣,mb.LocalVariables返回方法使用的所有類型的列表。這應該正是你需要發現,如果它使用B,C,D甚至Z. – 2012-07-31 19:48:06