我的目的是使用反射调查类型的“方法”以验证以下内容:
方法应该是实例方法和公共方法。
采用参数“params”并且性质无效。
方法不进行递归调用。
我开始时:
static void ProcessMethodInfo(Type t)
{
MethodInfo[] info = t.GetMethods();
foreach (MethodInfo mi in info)
{
// How to check the conditions here ?
}
}
但我不知道如何继续前进。需要帮助。
答案 0 :(得分:3)
好吧,如果用3表示检查中的方法应该是非递归的;那是痛苦的 - 你需要解析IL。但对其他人而言;
Type type = ...
var qry = from method in type.GetMethods(
BindingFlags.Instance | BindingFlags.Public)
where method.ReturnType == typeof(void)
let parameters = method.GetParameters()
where parameters.Length == 1
&& parameters[0].ParameterType.IsArray
&& Attribute.IsDefined(parameters[0], typeof(ParamArrayAttribute))
select method;
foreach (var method in qry)
{
Console.WriteLine(method.Name);
}
答案 1 :(得分:1)
所有:使用谷歌;)
答案 2 :(得分:0)
我认为您无法使用反射检测第3项。
答案 3 :(得分:0)
检查MethodInfo类的以下成员:
为了能够检查方法是否是递归的,我认为你需要更多的东西,然后只需要简单的反思。