使用反射确定c#中某个类型使用的所有类型
如果我有使用反射确定c#中某个类型使用的所有类型,c#,reflection,C#,Reflection,如果我有 class A { public void DoStuff() { B b; } } struct B {} struct C {} 我有(A)的类型 我想获得a使用的所有类型的列表。在这种情况下,它将是typeof(B),而不是typeof(C) 有没有一种很好的方法可以通过反射来实现这一点?您需要查看这个类(链接中有一个很好的例子说明它的用途)。这将允许您编写如下代码: MethodInfo mi = typeof(A).GetMethod("Do
class A
{
public void DoStuff()
{
B b;
}
}
struct B {}
struct C {}
我有(A)的类型
我想获得a使用的所有类型的列表。在这种情况下,它将是typeof(B)
,而不是typeof(C)
有没有一种很好的方法可以通过反射来实现这一点?您需要查看这个类(链接中有一个很好的例子说明它的用途)。这将允许您编写如下代码:
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!");
}
通过
Type.GetFields
,Type.GetProperties
(或Type.GetMembers
)等等,很容易获得A
的所有类型的成员。但是要弄清楚在一个方法中本地使用的是什么类型?不太确定。你在运行时需要这个吗?你有权访问代码,还是只有类型?类似的SO问题:如果文章中不清楚,很抱歉。我不想知道B和C存在的事实。如果A也使用D,我也希望找到它。正如您在我的代码中看到的,mb.LocalVariables返回该方法使用的所有类型的列表。如果它使用B、C、D甚至Z,那么这正是您需要发现的。