在lambda中搜索函数参数

时间:2014-03-28 07:52:22

标签: c# function lambda

有一个功能:

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;而目前我被困住了。任何想法如何解析这样的功能?

1 个答案:

答案 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

一切顺利。