如何使用表达式树类型

时间:2015-08-28 20:22:00

标签: c# lambda

Lamba Expressions上的MSDN文档提供了如何创建表达式树类型的示例,但未显示如何使用它:

using System.Linq.Expressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Expression<del> myET = x => x * x;
        }
    }
}

你能完成这个控制台应用程序代码,以便它实际演示这个概念吗?

1 个答案:

答案 0 :(得分:1)

通常,表达式树包含两部分。一组参数和一个正文。您的示例中只显示了一个参数,即x,并且正文通过将其与自身相乘来使用该参数。

基本上,行为设置是这样的:

public int myET(int x)
{
    return x * x;
}

但是,为了访问该行为,必须访问Expression的值。此值是委托,可通过使用.Compile()编译表达式来访问。其类型为Func,其del代表的类型参数返回int并接受int

delegate int del(int i);
static void Main(string[] args)
{
    Expression<del> myET = x => x * x;
    del myFunc = myET.Compile();
}

编译完成后,可以像上面显示的方法一样调用该函数,其中发送参数的值,并返回正文中代码的结果。

delegate int del(int i);
static void Main(string[] args)
{
    Expression<del> myET = x => x * x;
    del myFunc = myET.Compile();
    int fiveSquared = myFunc(5);
    Console.WriteLine(fiveSquared);//25
}