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

首頁 > 編程 > C# > 正文

C#中Linq延遲查詢的例子

2020-01-24 01:42:16
字體:
來源:轉載
供稿:網友

提出問題

下面所給代碼編譯時正常,但是執行時會出錯,請指出程序在執行時能夠執行到編號為(1)(2)(3)的代碼行中的哪一行。

using System;using System.Collections.Generic;using System.Linq;namespace DeferredExecutionExp{  class Program  {    static void Main(string[] args)    {      List<Student> studentList = new List<Student>()      {        new Student(){Id =1, Name="ZhangSan", Age=20},        new Student(){Id =2, Name=null, Age=21},        new Student(){Id =3, Name="Lisi", Age=22}      };      var queryedStudentList = studentList.Where(it => it.Name.Trim() != "ZhangSan");//(1)      if (queryedStudentList.Count() > 0)//(2)      {        foreach (var student in queryedStudentList)//(3)        {          Console.WriteLine(student.Name);        }      }    }  }  public class Student  {    public int Id { get; set; }    public string Name { get; set; }    public int Age { get; set; }  }}

問題分析

其實,發現問題并不難,很顯然在執行代碼“it => it.Name.Trim()”時會出錯,因為集合studentList中第二個學生的Name屬性為null,當遍歷到該學生時,對其Name屬性執行Trim操作,不出錯才怪呢。既然在這里會出錯,那么程序肯定是執行到該行就GameOver了呀。但是實際情況又會是這樣嗎?

動手驗證

單步調試程序,發現:執行到代碼行(1)時,程序并沒有出錯,而是在執行代碼行(2)時,程序才出現了異常,查看異常信息,卻提示的是在執行代碼行(1)時有問題,為什么會這樣呢?為什么執行到代碼行(2)時還會去執行代碼行(1)呢?這全都是因為Linq的延遲查詢導致的。

延遲查詢

延遲查詢的意思是說:在運行期間定義查詢表達式時,查詢不會執行,只有到迭代數據項時查詢才會被執行。本例中的代碼行(1)只是定義了查詢,而代碼行(2)中當調用Count方法時便會遍歷數據項,這時便會執行查詢,也就是說會去執行代碼行(1)定義的查詢,最終導致了本例中這種現象的出現。

所以,本例中的代碼最終能夠執行到的代碼行是(2)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台安县| 塔河县| 白城市| 巴中市| 金山区| 佛教| 永登县| 和政县| 石屏县| 益阳市| 天等县| 都江堰市| 迁西县| 扬州市| 锡林郭勒盟| 龙山县| 巴中市| 交口县| 门源| 长治市| 韩城市| 宁国市| 赤城县| 扶绥县| 顺平县| 仁寿县| 香港 | 临海市| 民权县| 屏东市| 常熟市| 青岛市| 襄城县| 罗山县| 佛坪县| 大姚县| 江阴市| 黄梅县| 博湖县| 卫辉市| 米林县|