有一个功能:
Func<object, double> calculation = x => Row("1") + Row("2");
其中Row是一些提取某些数据的函数,例如:
public static double Row(string rowName)
{
return 100; // just an example irrelevant in this case
}
我想提取Row函数调用的所有参数。在这种情况下
var parameters = Parse(calculation).ToList();
参数将包含&#34; 1&#34;和&#34; 2&#34;。我开始时:
private IEnumerable<string> Parse(Func<object, double> calculation)
{
// and I'm stuck here :)
}
我想提取的是价值观&#34; 1&#34;和&#34; 2&#34;而目前我被困住了。任何想法如何解析这样的功能?
答案 0 :(得分:1)
我认为不可能直接使用.net将参数传递给委托内的方法。你可以得到的最接近的是GetMethodBody().GetILAsByteArray()
反射,它返回一个字节数组。这本身就没用了。有以下效果的东西。
private IEnumerable<string> Parse(Func<object, double> calculation)
{
var byteArr = calculation.GetInvocationList().First().Method.GetMethodBody().GetILAsByteArray();
//returned null so that the method can build
return null;
}
您可以尝试使用Mono.Cecil并检查它是否可以以任何方式帮助您。我曾尝试过一次,但与您的用户案例不相似。以下是可能有助于您理解它的一些帖子。
https://stackoverflow.com/questions/1513319/mono-cecil-documentation-and-tutorials
http://www.bytecodeartist.net/2011/05/introduction-to-il-rewriting-with-cecil.html http://www.codeproject.com/Articles/671259/Reweaving-IL-code-with-Mono-Cecil
一切顺利。