,如果我有使用反射
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