C#-Linq源碼解析之Concat

前言

在Dotnet開發過程中,Concat作為IEnumerable的擴展方法,十分常用。本文對Concat方法的關鍵源碼進行簡要分析,以方便大家日后更好的使用該方法。

使用

Concat?連接兩個序列。

假如我們有這樣的兩個集合,我們需要把兩個集合進行連接!

List<string>?lst?=?new?List<string>?{?"張三",?"李四"?};
List<string>?lst2?=?new?List<string>?{?"王麻子"?};
  • 不使用Linq

大概會這樣寫!

private?List<string>?Concat(List<string>?first,?List<string>?second){if?(first?==?null){throw?new?Exception("first?is?null");}if?(second?==?null){throw?new?Exception("second?is?null");}List<string>?lstAll?=?new?List<string>();foreach?(var?item?in?first){lstAll.Add(item);}foreach?(var?item?in?second){lstAll.Add(item);}return?lstAll;}
  • 使用Linq

lst.Concat(lst2);

源碼解析

方法

public?static?IEnumerable<TSource>?Concat<TSource>(this?IEnumerable<TSource>?first,?IEnumerable<TSource>?second)
參數
  • first 要連接的第一個序列。

  • second 要連接的第二個序列。

返回值
  • IEnumerable< TSource > 一個包含兩個輸入序列的連接元素的 IEnumerable< T>。

此方法通過使用延遲執行來實現,因為IEnumerable是延遲加載的,每次訪問的時候才取值。所以我們在返回數據時需要使用yield

所以我們可通過使用 foreach 語句從迭代器方法返回的序列。foreach 循環的每次迭代都會調用迭代器方法。迭代器方法運行到 yield return 語句時,會返回一個 expression,并保留當前在代碼中的位置。下次調用迭代器函數時,將從該位置重新開始執行。

源碼:
public?static?IEnumerable<TSource>?Concat<TSource>(this?IEnumerable<TSource>?first,?IEnumerable<TSource>?second){if?(first?==?null){throw?new?Exception("first?is?null");}if?(second?==?null){throw?new?Exception("second?is?null");}foreach?(TSource?item?in?first){yield?return?item;}foreach?(TSource?item2?in?second){yield?return?item2;}}

總結

本次通過分析Concat代碼,進一步了解了迭代器與yield。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285949.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285949.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285949.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

11 驗證器《ThinkPHP6 入門到電商實戰》

注&#xff1a;示例來源于官方手冊 一、驗證器定義 驗證器用于對數據進行驗證&#xff0c;你可以理解為一個“層”&#xff0c;在傳入數據時可以使用這個層對數據進行驗證&#xff0c;這樣就可以不用頻繁的在方法中編寫代碼去驗證&#xff0c;只需要編寫一個驗證層即可&#…

合作開發和委托開發完成成果的歸屬

據專利法第8條的規定&#xff1a;“兩個以上單位或者個人合作完成的發明創造、一個單位或者個人接受其他單位或者個人委托所完成的發明創造&#xff0c;除另有協議的以外&#xff0c;申請專利的權利屬于完成或者共同完成的單位或者個人&#xff1b;申請被批準后&#xff0c;申請…

C語言試題六十三之請編寫函數fun:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。

1、 題目 請編寫函數fun,其功能是:將s所指字符串中ascii值為偶數的字符刪除,串中剩余字符形成一個新串放在t所指的數組中。 2 、溫馨提示 C語言試題匯總里可用于計算機二級C語言筆試、機試、研究生復試中C程序設計科目、幫助C語言學者打好程序基礎、C語言基礎,鍛煉您…

nginx+php

nginxphp基礎架構 生產實踐 nginx配置文件: 主配置文件 123456789101112131415161718192021222324252627282930313233[rootlinux-node1 conf.d]# cat /etc/nginx/nginx.conf user nginx;worker_processes auto;error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load…

【ArcGIS風暴】ArcGIS10.8中柵格數據金字塔的來龍去脈,你知道嗎?

如下圖所示,通常情況下,當將沒有金字塔的柵格數據集添加至 ArcGIS時,系統將提示您構建金字塔。金字塔指不同比例下分辨率降低的數據概視圖。金字塔十分有用,因為金字塔提升了分辨率低于其全分辨率的柵格數據集的繪制速度。建議構建用于大型柵格數據集的金字塔。 點擊【是】…

斯坦福大學Andrew Ng - 機器學習筆記(8) -- 推薦系統 大規模機器學習 圖片文字識別...

大概用了一個月&#xff0c;Andrew Ng老師的機器學習視頻斷斷續續看完了&#xff0c;以下是個人學習筆記&#xff0c;入門級別&#xff0c;權當總結。筆記難免有遺漏和誤解&#xff0c;歡迎討論。 鳴謝&#xff1a;中國海洋大學黃海廣博士提供課程視頻和個人筆記&#xff0c;在…

表單按鈕實現 type=image

<input type"image" src"http://img01.51jobcdn.com/im/2012/index/main_login_btn.gif" border"0" οnfοcus"blur()">轉載于:https://www.cnblogs.com/zxmbest1/p/5121666.html

.NET7之MiniAPI(特別篇) .NET Preview5參數綁定

.NET Preview5中&#xff0c;給MiniAPI帶來了一個參數綁定的功能&#xff0c;看到這個功能&#xff0c;我一下子就開心了&#xff0c;因為它提供了一個把松散的傳入數據或注入功能耦合在一起的能力&#xff0c;并且可以根據自己的需求自由組合&#xff0c;結合上原來的Fromxxx(…

C語言試題六十四之請編寫函數fun:求勾股數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

【CSS動效實戰(純CSS與JS動效)】02 flex 布局實戰(仿 JD 及 gitCode 布局)及 media 自適應初探 下

二、flex 仿 gitCode 布局 及 自適應 首先查看我們的頁面&#xff1a; 這個時候直接頂部一個塊&#xff0c;下面分為左中右三個塊&#xff0c;然后就解決了&#xff0c;是不是很簡單&#xff1f;相比剛剛那么這個簡單多了。那就來做吧。 2.1 基本布局 首先給一個 style 價格…

C語言按行和列求平均成績代碼(指針,二維數組)

如下所示成績表,如何按行(每個人)或按列(每門課)的平均成績? 結果: 文章目錄 1. 自定義行平均函數2. 自定義列平均函數3. main()函數調用平均函數1. 自定義行平均函數 float save(float **PA,int M,int

架構師必須知道的架構設計原則

目錄 一、前言 二、軟件設計原則 GRASP通用職責分配軟件模式 1. 信息專家(Information Expert) 2. 創建者(Creator) 3. 低耦合(Low Coupling) 4. 高內聚(High Cohesion) 5.控制器(Controller) 6. 多態(Polymorphism) 7. 純虛構(Pure Fabrication) 8. 間接(Indirectio…

LeetCode:Minimum Path Sum(網格最大路徑和)

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path. Note: You can only move either down or right at any point in time. 典型的動態規劃問題。 設dp[i][j]表示從左…

delete在js里為引用刪除

delete 運算符從對象中刪除一個屬性&#xff0c;或從數組中刪除一個元素。delete expressionexpression 參數是一個有效的 JScript 表達式&#xff0c;通常是一個屬性名或數組元素。說明如果 expression 的結果是一個對象&#xff0c;且在 expression 中指定的屬性存在&#xf…

C語言試題六十五之請編寫函數實現猴子吃桃問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 猴子吃桃問…

百度:病種類貼吧全面停止商業合作

新浪科技訊 1月12日上午消息&#xff0c; 百度今日就熱門疾病被出賣一事向新浪科技發布對外公告&#xff1a;病種類貼吧全面停止商業合作 只對權威公益組織開放。百度方面在公告中表示&#xff0c;為了規范具有明顯商業屬性貼吧的運營管理&#xff0c;并提升貼吧的內容質量和用…

【CSS動效實戰(純CSS與JS動效)】02 flex 布局實戰(仿 JD 及 gitCode 布局)及 media 自適應初探

一、flex 仿 JD 布局 首先&#xff0c;我們在編輯器中&#xff0c;寫上基礎代碼&#xff0c;當然要在 style 中加上一個 flex 類&#xff0c;用于 flex 布局的定義&#xff0c;這個是必然需要的&#xff0c;在此一定得加上。 <!DOCTYPE html> <html lang"en&qu…

C語言sin()函數繪制正弦曲線代碼(0-2π)

本文實現y=sin(x)正弦曲線在0-2π范圍內的曲線圖形,如下圖所示: 完整C語言代碼: #include<stdio.h> #include<math.h> main() {double y; int x,m,i; printf

MAUI模板項目閃退問題

MAUI模板項目閃退問題在MAUI最初發布的時候就曾創建過幾個模板項目進行體驗過&#xff0c;沒遇到什么坑。由于最近需要開發針對餐飲行業的收銀機&#xff08;安卓系統&#xff09;開發一款應用&#xff0c;這種收銀機一般配置不咋滴&#xff0c;系統版本和性能也肯定比不上我們…

真正CSDN博客文章一鍵轉載插件(含源碼)

插件地址&#xff1a;https://greasyfork.org/zh-CN/scripts/381053-csdn%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E8%BD%AC%E8%BD%BD%E6%8F%92%E4%BB%B6 插件安裝使用說明請參閱&#xff1a;https://greasyfork.org/zh-CN 文章閱讀界面 文章發布頁面 源代碼 // UserScript //…