C#中關於foreach遍歷使用的深入理解
在c#中透過foreach遍歷一個列表是經常拿用的方法,使用起來也方便,下面這篇文章先給大家介紹了關於C#中foreach遍歷的使用方法,後面介紹了c#使用foreach注意的一些是,文中透過範例程式碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
本文主要介紹了關於C#中foreach遍歷的用法以及c#使用foreach需要知道的一些事,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:
一、C#中foreach遍歷用法
#foreach迴圈用來列舉集合中所有的元素,foreach語句中的表達式由關鍵字in隔開的兩個項組成。 in右邊的項是集合名,in左邊的項是變數名,用來存放集合中的每個元素。
此迴圈的運作過程如下:每一次迴圈時,從集合中取出一個新的元素值。放到唯讀變數中去,如果括號中的整個表達式回傳值為true,foreach區塊中的語句就能夠執行。一旦集合中的元素都已經被存取到,整個表達式的值為false,控制流程就會轉入到foreach區塊後面的執行語句。
foreach語句經常與陣列一起使用,下面實例將透過foreach語句讀取數組的值並進行顯示。
陣列的屬性:Array.Length陣列的容量
利用這個屬性,我們可以取得陣列物件允許儲存的容量值,也就是數組的長度、元素個數,這個比較好理解,數組還有其他的屬性,比如數組的維數等,屬性的用法比較簡單,學會一種,其他的格式基本一致,這裡我們就不舉例了。
當陣列的維度、容量較多時,C#提供了foreach語句,專門用來讀取集合/陣列中的所有元素,我們把這種功能叫做遍歷。語法書寫如下:
遍歷陣列:foreach(type objName in collection/Array)
這段語句會逐一檢查陣列中的所儲存的變數值,並且一一將其取出,其中的type是你所要讀取的數組物件將要儲存在objName變數的資料類型,而objName是定義了一個type類型的變數名,代表每一次從集合和在陣列(collection/Array)中取得的元素,collection/Array則是所要存取的陣列物件。用這種方法只要寫一個foreach就可以遍歷出除交錯數組以外的所有維數的數組。
註:objName的資料類型type必須與collection/Array物件的類型相同或比它大。
下面我們舉一個用foreach和for遍歷規則數組的例子,其中涉及到了一個數組得到維數的方法,比較foreach在一次性遍歷規則數組上的優勢。
int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };// 定义一个2行2列2纵深的3维数组a for (int i = 0; i < a.GetLength (0) ;i++ ) //用Array.GetLength(n)得到数组[0,1,,,n]上的维数的元素数,0代表行,1列,n代表此数组是n+1维 { for (int j = 0; j < a.GetLength(1); j++) { for (int z = 0; z < a.GetLength(2);z++ )//2代表得到纵深上的元素数,如果数组有n维就得写n个for循环 { Console.WriteLine(a[i,j,z]); } } }
用foreach循環一次遍歷a數組
int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a foreach(int i in a) { Console .WriteLine (i); }
這兩個程式碼執行的結果是一樣的都是每行一個元素,共8行,元素分別是1 2 3 4 5 6 7 8
下面我們再做個例子,是一個利用for和foreach循環做的訪問數組元素的例子,首先提示用戶輸入學生的個數,然後把學生個數作為存儲學生姓名的數組names的元素個數,採用for循環按照數組的索引i從0位開始循環輸出"輸入學生姓名"的提示,並把使用者輸入的學生姓名按照其在數組的索引方式names[i]
儲存在names數組中,for循環次數的最大值(即索引的最大值)透過陣列屬性.Length
得到,我們說過容量與索引之間的關係是index=Array.Length-1
,本題即i的最大值
必須注意的是:借助foreach,只能一一取得陣列中的元素,並不能利用這種語句改變陣列所儲存的元素。
using System; class Program { static void Main() { int count; Console.WriteLine("输入要登记的学生数"); count = int.Parse(Console.ReadLine()); string[]names = new string[count]; for (int i = 0; i < names.Length; i++) { Console.WriteLine("请输入第{0}个学生的姓名", i + 1); names[i] = Console.ReadLine(); } Console.WriteLine("已登记的学生如下"); foreach (string name in names) { Console.WriteLine("{0}", name); } Console.ReadKey(); } }
二、c#使用foreach需要知道的
在c#中透過foreach遍歷一個列表是經常拿用的方法,使用起來也方便,性能上也和for沒有多大的差別;那為什麼還要注意呢?我們先下來看以下這句話:分配的記憶體數量和完成測試所需的時間之間有直接關係。當我們單獨查看的時候,記憶體分配並不是非常昂貴。但是,當記憶體系統只是偶爾清理不使用的記憶體時,問題就出現了,並且問題出現的頻率和要分配的記憶體數量成正比。因此,你分配越多的內存,對內存進行垃圾回收的頻率就越頻繁,你的程式碼效能就會變得越差。
从上面那些话可以看到内存的回收是非常损耗资源,那我们再看下一些.net内部类型的实现。
Array:
// System.Array public IEnumerator GetEnumerator() { int lowerBound = this.GetLowerBound(0); if (this.Rank == 1 && lowerBound == 0) { return new Array.SZArrayEnumerator(this); } return new Array.ArrayEnumerator(this, lowerBound, this.Length); }
List
// System.Collections.Generic.List<T> public List<T>.Enumerator GetEnumerator() { return new List<T>.Enumerator(this); }
Dictionary
// System.Collections.Generic.Dictionary<TKey, TValue> public Dictionary<TKey, TValue>.Enumerator GetEnumerator() { return new Dictionary<TKey, TValue>.Enumerator(this, 2); }
从以上代码来看,我们再进行foreach操作以上对象的时候都会构建一个Enumerator;也许有人会认为这点东西不需要计较,不过的确很多情况是不用关心;但如果通过内存分析到到的结果表明构建Enumerator的数量排在前几位,那就真的要关心一下了。很简单的一个应用假设你的应用要处理几W的并发,而每次都存在几次foreach那你就能计算出有多少对象的产生和回收?
看下一个简单的分析图,这里紧紧是存在一个List'1如果组件内部每个并发多几个foreach又会怎样?
改成for的结果又怎样呢
总结
以上是C#中關於foreach遍歷使用的深入理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

一、Iterator和foreach的區別多態差異(foreach底層就是Iterator)Iterator是一個介面類型,他不關心集合或數組的類型;for和foreach都需要先知道集合的類型,甚至是集合內元素的類型; 1.為啥說foreach底層就是Iterator寫的程式碼:反編譯程式碼:二、foreach與iterator時remove的差別先來看阿里java開發手冊但1的時候不會報錯,2的時候就會報錯(java. util.ConcurrentModificationException)首

php判斷foreach循環到第幾個的步驟:1、創建一個「$fruits」的數組;2、創建一個計數器變數「$counter」初始值為0;3、使用「foreach」循環遍歷數組,並在循環體中增加計數器變數的值,再輸出每個元素和它們的索引;4、在「foreach」循環體外輸出計數器變數的值,以確認循環到了第幾個元素。

當今人工智慧(AI)技術的發展如火如荼,它們在各個領域都展現了巨大的潛力和影響力。今天大姚給大家分享4個.NET開源的AI模型LLM相關的專案框架,希望能為大家提供一些參考。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一種開源的軟體開發工具包(SDK),旨在將大型語言模型(LLM)如OpenAI、Azure

這篇文章將為大家詳細講解有關PHP返回一個鍵值翻轉後的數組,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP鍵值翻轉數組鍵值翻轉是一種對數組進行的操作,它將數組中的鍵和值進行交換,產生一個新的數組,其中原始鍵作為值,原始值作為鍵。實作方法在php中,可以透過以下方法對陣列進行鍵值翻轉:array_flip()函數:array_flip()函數專門用於鍵值翻轉操作。它接收一個數組作為參數,並傳回一個新的數組,其中鍵和值已交換。 $original_array=[

這篇文章將為大家詳細講解有關PHP返回數組中的當前元素,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。取得PHP陣列中的目前元素php為存取和操作陣列提供了多種方法,其中包括取得陣列中的目前元素。以下介紹幾種常用的技術:1.current()函數current()函數傳回數組內部指標目前指向的元素。指標最初指向數組的第一個元素。使用下列語法:$currentElement=current($array);2.key()函數key()函數傳回陣列內部指標目前指向元

區別:1、for透過索引來循環遍歷每一個資料元素,而forEach透過JS底層程式來循環遍歷數組的資料元素;2、for可以透過break關鍵字來終止迴圈的執行,而forEach不可以;3、 for可以透過控制迴圈變數的數值來控制迴圈的執行,而forEach不行;4、for在迴圈外可以呼叫迴圈變量,而forEach在迴圈外不能呼叫迴圈變數;5、for的執行效率要高於forEach。

如果你是.NET開發者,你必須意識到在交付高品質軟體方面,優化功能和效能的重要性。透過熟練使用提供的資源並減少網站載入時間,你不僅為使用者創造了愉快的體驗,還能減少基礎設施成本。
