• 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));

  • 相关阅读:
    (转)Xargs用法详解
    (转)运维老鸟教你安装centos6.5如何选择安装包
    (转)正则表达式与三剑客的使用技巧
    php OAuth服务端编写
    前端工程精粹(一):静态资源版本更新与缓存
    静态资源打包:一个javescript 的src引用多个文件,一个link引用多个CSS文件
    ie,cookie,域名与下划线
    HTML中css和js链接中的版本号
    PHP 优化详解
    jqury插件编写
  • 原文地址:https://www.cnblogs.com/mokliu/p/2138183.html
Copyright © 2020-2023  润新知