国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

IEnumerable和IQueryable的區別以及背后的ExpressionTree表達式樹

2019-11-17 02:28:46
字體:
來源:轉載
供稿:網友

IEnumerable和IQueryable的區別以及背后的ExPRessionTree表達式樹

關于IEnumerable和IQueryable的區別,這事還要從泛型委托Func<T>說起。來看一個簡單的泛型委托例子:

    class Program
    {
        static void Main(string[] args)
        {
            Func<int, bool> f = i => i > 5;
            Console.WriteLine(f(3));
            Console.WriteLine(f(10));
            Console.ReadKey();
        }
    }

Func<T>是"語法糖",實際上,編譯器在內部會生成一個臨時方法,再執行該方法。等同于如下:

    class Program
    {
        static void Main(string[] args)
        {
            Func<int, bool> f = DoSth;
            Console.WriteLine(f(3));
            Console.ReadKey();
        }
        static bool DoSth(int i)
        {
            return i > 5;
        }
    }

以上,.NET內部運作的路徑是:編寫C#代碼→編譯器編譯成中間語言IL→運行時JIT編譯成本地語言執行

■ 使用表達式樹 Expression Tree

可是,有時候我們希望在運行時執行代碼,該怎么辦呢?

.NET為我們提供了Expression Tree,允許我們在運行時執行代碼。

比如以上Func<int, bool> f = i => i > 5;這個表達式,Expression Tree這樣理解這個表達式:

○ f是Expression<Func<int, bool>>類型,級Expression<TDelegate>類型○ =>被理解成BinaryExpression類型○ =>左右兩邊的i被理解成ParameterExpression○ =>右邊的5被理解成ConstantExpression

于是,如果我們用Expression Tree,在運行時執行代碼,可以按如下寫:

    class Program
    {
        static void Main(string[] args)
        {
            //Func<int, bool> f = i => i > 5;
            ParameterExpression iparam = Expression.Parameter(typeof (int), "i");
            ConstantExpression constExp = Expression.Constant(5, typeof (int));
            BinaryExpression greaterThan = Expression.GreaterThan(iParam, constExp);
            Expression<Func<int, bool>> f = Expression.Lambda<Func<int, bool>>(greaterThan, iParam);
            Func<int, bool> myDele = f.Compile();
            Console.WriteLine(myDele(3));

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潢川县| 鄂托克旗| 喀喇| 宁强县| 色达县| 冷水江市| 山丹县| 兴城市| 湄潭县| 杂多县| 平南县| 开封县| 灵山县| 普格县| 澄城县| 灵寿县| 巴林右旗| 漠河县| 新营市| 陆良县| 宁城县| 波密县| 久治县| 石家庄市| 锦屏县| 雅江县| 乐安县| 衡山县| 岗巴县| 扎兰屯市| 吉安市| 咸宁市| 台山市| 南华县| 西宁市| 松桃| 万源市| 保德县| 潼南县| 女性| 凤台县|