使用反射确定c#中某种类型使用的所有类型

Luc*_*jer 5 c# reflection

如果我有

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

struct B {}
struct C {}
Run Code Online (Sandbox Code Playgroud)

我有typeof(A),

我想获得A使用的所有类型的列表.在这种情况下,它将是typeof(B) 和不是typeof(C).

有没有一种很好的方法来做反射?

RB.*_*RB. 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!");
}
Run Code Online (Sandbox Code Playgroud)