,如果我有使用反射
class A
{
public void DoStuff()
{
B b;
}
}
struct B {}
struct C {}
,我有typeof(A)
确定在C#中使用某种类型的所有类型,
我想获得在此使用A.所有类型的列表如果是typeof(B)
而不是typeof(C)
。
有没有一个很好的方法来做到这一点与反思?
,如果我有使用反射
class A
{
public void DoStuff()
{
B b;
}
}
struct B {}
struct C {}
,我有typeof(A)
确定在C#中使用某种类型的所有类型,
我想获得在此使用A.所有类型的列表如果是typeof(B)
而不是typeof(C)
。
有没有一个很好的方法来做到这一点与反思?
您需要查看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!");
}
对不起,如果它不明确从帖子。我不想知道B和C存在的事实。如果A也使用D,我也想找出答案。 – 2012-07-31 17:53:46
正如你在我的代码中看到的那样,mb.LocalVariables返回方法使用的所有类型的列表。这应该正是你需要发现,如果它使用B,C,D甚至Z. – 2012-07-31 19:48:06
这是很容易通过'Type.GetFields','Type.GetProperties'(或'Type.GetMembers')等获得各类A'的'的_members_的上。但搞清楚什么类型在本地使用_方法?不太确定。 – 2012-07-31 11:34:56
运行时需要这个吗?你有权访问代码,还是只有Type? – Martin1921 2012-07-31 11:37:43
类似SO问题:http://stackoverflow.com/questions/1975702/net-reflection-find-used-types – VS1 2012-07-31 11:40:29