C# .Net学习笔记—— Expression 表达式目录树

2023-12-20 13:43:15

一、什么是表达式目录树

(1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的,lambda可以是匿名方法,当然也可以使用Expression来动态的创建!

二、Func与Expression的区别

1、Func是方法

 Func<int, int, int> func = (m, n) => m * n + 2;
 Console.WriteLine(func.Invoke(1, 1)); 
//运算:1*1+2=3

?2、Expression是数据结构

//lambda表达式声明表达式目录树
Expression<Func<int, int, int>> exp = (m, n) => m * n + 2;
int result = exp.Compile().Invoke(1, 2);
Console.WriteLine(result); 
//运算:1*2+2=4

注意:Expression只能为1行(如下图会报错)

3、使用ILSpy反编译解析看一下

调一下格式更好看一点

            ParameterExpression parameterExpression = Expression.Parameter(typeof(int), "m");
            ParameterExpression parameterExpression2 = Expression.Parameter(typeof(int), "n");

            var multiply = Expression.Multiply(parameterExpression, parameterExpression2);
            var constant = Expression.Constant(2,typeof(int));
            var add = Expression.Add(multiply, constant);

            Expression<Func<int, int, int>> exp =
                Expression.Lambda<Func<int, int, int>>(
                        add,
                        new ParameterExpression[2]
                        {
                            parameterExpression, parameterExpression2
                        });
打印看看结果
      int result = exp.Compile().Invoke(11, 12);
            Console.WriteLine(result);

得到134,与m*n+2得出结果一致

4、拼装练习

(1)练习一:

(2)练习二

(3)练习三

文章来源:https://blog.csdn.net/weixin_46711336/article/details/135101375
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。