如果在方法内部使用了特定的扩展方法,请通过反射检查

时间:2014-09-06 15:05:07

标签: c# .net reflection

我在游荡,如果我在某些DLL中有这样的代码:

public class DemoClass
{
    public void TestAction(XMParams command)
    {
        var firstName = command.Parse<string>(Params.First, "First Name");
        var lastName = command.Parse<string>(Params.Second, "Last Name");

        var userData = new UserDataDto{
            FirstName = firstName,
            LastName = lastName
        }

        command.StoreValue(userData, "User Data");
    }
}

是否可以检测到使用 command.Parse 的这些行,并提取这些数据: command.Parse&lt; Type &gt;(索引说明

command.StoreValue(类型 DescriptiveName );

进入这个看起来像这个的对象列表:

public class InputParamObj
{
    public int Index {get;set;}
    public string Type {get;set;}
    public string Description {get;set;}
}
public class OutputObj
{
    public string Type {get;set;}
    public string Description {get;set;}
}
public class CommandData
{
    public List<InputParamObj> InputParams {get;set;}
    public OutputObj Output {get;set;}
}

请注意,这段代码将始终采用已知方法,例如在&#34; TestAction&#34;方法

1 个答案:

答案 0 :(得分:1)

你不想通过反思来做那种事情。使用MethodInfo.GetMethodBody(),您可以获得方法实现的二进制IL流,但运气好。

您需要解析代码。检查this以查看一个很好的解决方案列表。根据您的实际需要,大多数都很好。我个人会使用Roslyn,来自微软的新“编译器服务”,因为从我看到的,它真的是一个很好的api:功能强大,编写得非常好。但它现在可能不适合你的需求。