欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中Linq延遲查詢的例子

 更新時間:2015年06月17日 10:31:38   投稿:junjie  
這篇文章主要介紹了C#中Linq延遲查詢的例子,本文用一個實例來講解延遲查詢的使用,需要的朋友可以參考下

提出問題

下面所給代碼編譯時正常,但是執(zhí)行時會出錯,請指出程序在執(zhí)行時能夠執(zhí)行到編號為(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; }
  }
}

問題分析

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

動手驗證

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

延遲查詢

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

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

相關文章

  • c# 常用框架匯總

    c# 常用框架匯總

    這篇文章主要介紹了c# 常用框架匯總,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-04-04
  • WPF使用Dragablz構建可拖拽分離的Tab頁程序

    WPF使用Dragablz構建可拖拽分離的Tab頁程序

    這篇文章介紹了WPF使用Dragablz構建可拖拽分離Tab頁的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#中枚舉的特性 FlagAttribute詳解

    C#中枚舉的特性 FlagAttribute詳解

    說到FlagsAttribute,源自前幾天看到了一小段代碼,大概意思就是根據航班政策來返回哪些配送方式是否可用,根據這些是否可用來隱藏或者開啟界面的相關配送方式,不是非常明白,于是今天我們就來詳細探討下這個問題
    2018-03-03
  • C#使用HttpHelper框架重啟路由器

    C#使用HttpHelper框架重啟路由器

    這篇文章介紹了C#使用HttpHelper框架重啟路由器的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 可空類型Nullable<T>用法詳解

    可空類型Nullable<T>用法詳解

    本文詳細講解了可空類型Nullable<T>的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 動態(tài)改變gridview列寬度函數分享

    動態(tài)改變gridview列寬度函數分享

    通常用GridView綁定datatable,由于需要動態(tài)綁定到不同的datatable所以需要動態(tài)調整GridView的寬度。寫了這個函數實現(xiàn)該功能
    2014-01-01
  • C# 反射與dynamic最佳組合示例代碼

    C# 反射與dynamic最佳組合示例代碼

    這篇文章主要介紹了C# 反射與dynamic最佳組合示例代碼,需要的朋友可以參考下
    2017-09-09
  • 解決C#運行程序修改數據后數據表不做更新的問題

    解決C#運行程序修改數據后數據表不做更新的問題

    近日,在使用C#連接數據庫的時候,對數據庫中的表做更新后,在當前啟動項目中去顯示表數據時雖然會發(fā)生一個更新,但是在結束程序運行后再去觀察數據表中的記錄時發(fā)現(xiàn)并沒有發(fā)生一個變化,所以本文給大家解決一下這個問題,需要的朋友可以參考下
    2023-08-08
  • C#程序(含多個Dll)合并成一個Exe的簡單方法

    C#程序(含多個Dll)合并成一個Exe的簡單方法

    這篇文章主要為大家詳細介紹了C#程序(含多個Dll)合并成一個Exe的簡單方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • C# Onnx CenterNet實現(xiàn)目標檢測的示例詳解

    C# Onnx CenterNet實現(xiàn)目標檢測的示例詳解

    這篇文章主要為大家詳細介紹了C# Onnx CenterNet實現(xiàn)目標檢測的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12

最新評論