zoukankan      html  css  js  c++  java
  • c#中泛型表达式树备忘

    c#3.0中引入了表达式树,使用泛型表达式树可以方便的解决问题。举一个简单的例子,我们可以使用它来完成不同类型的数值的加减乘除。首先,来看一下简单的思路:(下述代码仅仅以加法运算来示例)

        static class Calculate<T>
        {
            public static T Add(T num1, T num2)
            {
                return num1 + num2;
            }
        }

         然而这个代码编译是不能通过的,因为泛型不可以进行相加的操作。这种简单的思路行不通,下面来看使用表达式树的解决方案:

        static class Calculate<T>
        {
            public static T Add(T num1, T num2)
            {
                //创建参数表达式树节点1
                ParameterExpression p1 = Expression.Parameter(typeof(T), "left");
                //创建参数表达式树节点2
                ParameterExpression p2 = Expression.Parameter(typeof(T), "right");
                //两个参数节点构成二叉树节点,节点关系为求和
                BinaryExpression p_add = Expression.Add(p1, p2);
                //定义lambda表达式,这个可以看一下msdn的说明,(Func<T,T,T>也是一个类型)
                Expression<Func<T, T, T>> fe = Expression.Lambda
                    <Func<T, T, T>>(p_add, new ParameterExpression[] { p1, p2 });
                //转化为匿名代理
                Func<T, T, T> fc = fe.Compile();
                //返回结果
                return fc(num1, num2);
            }
        }

           这样就可以对不同类型的数值进行加操作了:

            Console.WriteLine(Calculate<int>.add(3, 5));

  • 相关阅读:
    Ubuntu16.04搭建NetCore2.2运行环境
    Centos7安装Redis5.0.3
    Centos7常用命令
    logstash6.5.4同步mysql数据到elasticsearch 6.4.1
    Windows下安装Elasticsearch6.4.1和Head,IK分词器
    【selenium】-自动化测试的前提
    【软件测试基础】回顾总结
    【软件测试基础】其它测试分类
    【软件测试基础】文档测试
    【软件测试基础】兼容性测试
  • 原文地址:https://www.cnblogs.com/mokliu/p/2138183.html
Copyright © 2011-2022 走看看