最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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了呀。但是實際情況又會是這樣嗎?

動手驗證

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

延遲查詢

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

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

相關文章

  • C#實現(xiàn)程序開機啟動的方法

    C#實現(xiàn)程序開機啟動的方法

    這篇文章主要介紹了C#實現(xiàn)程序開機啟動的方法,涉及C#針對應用程序及注冊表的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Unity游戲之存儲數(shù)據(jù)

    Unity游戲之存儲數(shù)據(jù)

    這篇文章主要介紹了Unity游戲之存儲數(shù)據(jù),感興趣的同學,可以拷貝代碼,試驗一下
    2021-04-04
  • C#?獲取文件夾里所有文件名的詳細代碼

    C#?獲取文件夾里所有文件名的詳細代碼

    這篇文章主要介紹了C#?獲取文件夾里所有文件名,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 在C#中使用Channels的完整教程

    在C#中使用Channels的完整教程

    這篇文章主要介紹了在C#中使用Channels的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 提高C# StringBuilder操作性能優(yōu)化的方法

    提高C# StringBuilder操作性能優(yōu)化的方法

    本篇文章主要介紹使用C# StringBuilder 的項目實踐,用于減少內(nèi)存分配,提高字符串操作的性能。對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • C# 創(chuàng)建單例的多種方式

    C# 創(chuàng)建單例的多種方式

    這篇文章主要介紹了C# 創(chuàng)建單例的多種方式,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#難點逐個擊破(7):checked與unchecked

    C#難點逐個擊破(7):checked與unchecked

    checked 關鍵字用于對整型算術運算和轉(zhuǎn)換顯式啟用溢出檢查。
    2010-02-02
  • C# DataGridView綁定數(shù)據(jù)源的方法

    C# DataGridView綁定數(shù)據(jù)源的方法

    這篇文章主要為大家詳細介紹了C# DataGridView綁定數(shù)據(jù)源的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 說說C#的async和await的具體用法

    說說C#的async和await的具體用法

    本篇文章主要介紹了說說C#的async和await的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 支持多類型數(shù)據(jù)庫的c#數(shù)據(jù)庫模型示例

    支持多類型數(shù)據(jù)庫的c#數(shù)據(jù)庫模型示例

    本文為大家提供一個c#數(shù)據(jù)庫訪問模型,支持多類型數(shù)據(jù)庫,簡單抽取數(shù)據(jù)庫訪問函數(shù),大家參考使用吧
    2014-01-01

最新評論

虎林市| 甘泉县| 阳高县| 班玛县| 永昌县| 鹿邑县| 南靖县| 故城县| 耒阳市| 桃园市| 石门县| 秀山| 眉山市| 张家港市| 红原县| 吉木乃县| 中山市| 陆川县| 砚山县| 临城县| 白山市| 邳州市| 台安县| 扬州市| 松江区| 庐江县| 淅川县| 原阳县| 汝南县| 抚顺市| 綦江县| 兴义市| 罗源县| 安平县| 梓潼县| 九寨沟县| 饶平县| 保康县| 长海县| 安国市| 弥勒县|