2012-07-31 113 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