c#中泛型運算式樹狀架構備忘

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.