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

深入理解C#中foreach遍歷的使用方法

 更新時(shí)間:2017年08月08日 09:04:40   投稿:daisy  
在c#中通過foreach遍歷一個(gè)列表是經(jīng)常拿用的方法,使用起來也方便,下面這篇文章先給大家介紹了關(guān)于C#中foreach遍歷的使用方法,后面介紹了c#使用foreach注意的一些是,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

前言

本文主要給大家介紹了關(guān)于C#中foreach遍歷的用法以及c#使用foreach需要知道的一些事,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:

一、C#中foreach遍歷用法

foreach循環(huán)用于列舉出集合中所有的元素,foreach語句中的表達(dá)式由關(guān)鍵字in隔開的兩個(gè)項(xiàng)組成。in右邊的項(xiàng)是集合名,in左邊的項(xiàng)是變量名,用來存放該集合中的每個(gè)元素。

該循環(huán)的運(yùn)行過程如下:每一次循環(huán)時(shí),從集合中取出一個(gè)新的元素值。放到只讀變量中去,如果括號(hào)中的整個(gè)表達(dá)式返回值為true,foreach塊中的語句就能夠執(zhí)行。一旦集合中的元素都已經(jīng)被訪問到,整個(gè)表達(dá)式的值為false,控制流程就轉(zhuǎn)入到foreach塊后面
的執(zhí)行語句。

foreach語句經(jīng)常與數(shù)組一起使用,下面實(shí)例將通過foreach語句讀取數(shù)組的值并進(jìn)行顯示。

數(shù)組的屬性:Array.Length數(shù)組的容量

利用這個(gè)屬性,我們可以取得數(shù)組對(duì)象允許存儲(chǔ)的容量值,也就是數(shù)組的長(zhǎng)度、元素個(gè)數(shù),這個(gè)比較好理解,數(shù)組還有其他的屬性,比如數(shù)組的維數(shù)等,屬性的用法比較簡(jiǎn)單,學(xué)會(huì)一種,其他的格式基本一致,這里我們就不舉例了。

當(dāng)數(shù)組的維數(shù)、容量較多時(shí),C#提供了foreach語句,專門用來讀取集合/數(shù)組中的所有元素,我們把這種功能叫做遍歷。語法書寫如下:

遍歷數(shù)組:foreach(type objName in collection/Array)

這段語句會(huì)逐一檢查數(shù)組中的所存儲(chǔ)的變量值,并且一一將其取出,其中的type是你所要讀取的數(shù)組對(duì)象將要存儲(chǔ)在objName變量的數(shù)據(jù)類型,而objName是定義了一個(gè)type類型的變量名,代表每一次從集合和數(shù)組(collection/Array)中取得的元素,collection/Array則是所要存取的數(shù)組對(duì)象。用這種方法只需寫一個(gè)foreach就可以遍歷出除交錯(cuò)數(shù)組以外的所有維數(shù)的數(shù)組。

注: objName的數(shù)據(jù)類型type必須與collection/Array對(duì)象的類型相同或比它大。

下面我們舉一個(gè)用foreach和for遍歷規(guī)則數(shù)組的例子,其中涉及到了一個(gè)數(shù)組得到維數(shù)的方法,比較foreach在一次性遍歷規(guī)則數(shù)組上的優(yōu)勢(shì)。

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };// 定義一個(gè)2行2列2縱深的3維數(shù)組a
for (int i = 0; i < a.GetLength (0) ;i++ ) //用Array.GetLength(n)得到數(shù)組[0,1,,,n]上的維數(shù)的元素?cái)?shù),0代表行,1列,n代表此數(shù)組是n+1維
{
 for (int j = 0; j < a.GetLength(1); j++)
 {
 for (int z = 0; z < a.GetLength(2);z++ )//2代表得到縱深上的元素?cái)?shù),如果數(shù)組有n維就得寫n個(gè)for循環(huán)
 {
 Console.WriteLine(a[i,j,z]);
 }
 }
}

用foreach循環(huán)一次性遍歷a數(shù)組

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定義一個(gè)2行2列2縱深的3維數(shù)組a
foreach(int i in a)
{
 Console .WriteLine (i);
}

這兩種代碼執(zhí)行的結(jié)果是一樣的都是 每行一個(gè)元素,共8行,元素分別是1 2 3 4 5 6 7 8

下面我們?cè)僮鰝€(gè)例子,是一個(gè)利用for和foreach循環(huán)做的存取數(shù)組元素的例子,首先提示用戶輸入學(xué)生的個(gè)數(shù),然后把學(xué)生個(gè)數(shù)作為存儲(chǔ)學(xué)生姓名的數(shù)組names的元素個(gè)數(shù),采用for循環(huán)按照數(shù)組的索引i從0位開始循環(huán)輸出"輸入學(xué)生姓名"的提示,并把用戶輸入的學(xué)生姓名按照其在數(shù)組的索引方式names[i]存儲(chǔ)在names數(shù)組中,for循環(huán)次數(shù)的最大值(即索引的最大值)通過數(shù)組屬性.Length得到,我們說過容量與索引之間的關(guān)系是index=Array.Length-1,本題即i的最大值

必須注意的是:借助foreach,只能一一取得數(shù)組中的元素,并不能利用這種語句改變數(shù)組所存儲(chǔ)的元素。


using System;
class Program
{
 static void Main()
 {
 int count;
 Console.WriteLine("輸入要登記的學(xué)生數(shù)");
 count = int.Parse(Console.ReadLine());
 string[]names = new string[count];
 for (int i = 0; i < names.Length; i++)
 {
 Console.WriteLine("請(qǐng)輸入第{0}個(gè)學(xué)生的姓名", i + 1);
 names[i] = Console.ReadLine();
 }
 Console.WriteLine("已登記的學(xué)生如下");
 foreach (string name in names)
 {
 Console.WriteLine("{0}", name);
 }
 Console.ReadKey();
 }
}

二、c#使用foreach需要知道的

在c#中通過foreach遍歷一個(gè)列表是經(jīng)常拿用的方法,使用起來也方便,性能上也和for沒有多大的差別;那為什么還要注意呢?我們先下來看下以下這句話:分配的內(nèi)存數(shù)量和完成測(cè)試所需的時(shí)間之間有直接關(guān)系。當(dāng)我們單獨(dú)查看的時(shí)候,內(nèi)存分配并不是非常昂貴。但是,當(dāng)內(nèi)存系統(tǒng)只是偶爾清理不使用的內(nèi)存時(shí),問題就出現(xiàn)了,并且問題出現(xiàn)的頻率和要分配的內(nèi)存數(shù)量成正比。因此,你分配越多的內(nèi)存,對(duì)內(nèi)存進(jìn)行垃圾回收的頻率就越頻繁,你的代碼性能就會(huì)變得越差。

從上面那些話可以看到內(nèi)存的回收是非常損耗資源,那我們?cè)倏聪乱恍?net內(nèi)部類型的實(shí)現(xiàn)。

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<T>:

// System.Collections.Generic.List<T>

public List<T>.Enumerator GetEnumerator()

{

return new List<T>.Enumerator(this);

} 

Dictionary<TKey, TValue>:

// System.Collections.Generic.Dictionary<TKey, TValue>

public Dictionary<TKey, TValue>.Enumerator GetEnumerator()

{

return new Dictionary<TKey, TValue>.Enumerator(this, 2);

} 

從以上代碼來看,我們?cè)龠M(jìn)行foreach操作以上對(duì)象的時(shí)候都會(huì)構(gòu)建一個(gè)Enumerator;也許有人會(huì)認(rèn)為這點(diǎn)東西不需要計(jì)較,不過的確很多情況是不用關(guān)心;但如果通過內(nèi)存分析到到的結(jié)果表明構(gòu)建Enumerator的數(shù)量排在前幾位,那就真的要關(guān)心一下了。很簡(jiǎn)單的一個(gè)應(yīng)用假設(shè)你的應(yīng)用要處理幾W的并發(fā),而每次都存在幾次foreach那你就能計(jì)算出有多少對(duì)象的產(chǎn)生和回收?

看下一個(gè)簡(jiǎn)單的分析圖,這里緊緊是存在一個(gè)List'1如果組件內(nèi)部每個(gè)并發(fā)多幾個(gè)foreach又會(huì)怎樣?

改成for的結(jié)果又怎樣呢


總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 一文搞懂C#實(shí)現(xiàn)讀寫文本文件中的數(shù)據(jù)

    一文搞懂C#實(shí)現(xiàn)讀寫文本文件中的數(shù)據(jù)

    這篇文章重點(diǎn)給大家介紹C#實(shí)現(xiàn)讀寫文本文件中的數(shù)據(jù)的一些知識(shí),讀取.txt文件數(shù)據(jù)的實(shí)例代碼及寫入讀取過程完整代碼,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • c#語言程序構(gòu)建基塊

    c#語言程序構(gòu)建基塊

    這篇文章主要介紹了c#語言程序構(gòu)建基塊,關(guān)于c#程序構(gòu)建基塊我們要從成員開始,class?的成員要么是靜態(tài)成員,要么是實(shí)例成員。?靜態(tài)成員屬于類,而實(shí)例成員則屬于對(duì)象,具體內(nèi)容需要的小伙伴可以參考下面文章的詳細(xì)內(nèi)容
    2021-12-12
  • C#基于Spire.Doc for .NET從URL下載Word文檔的實(shí)現(xiàn)方案

    C#基于Spire.Doc for .NET從URL下載Word文檔的實(shí)現(xiàn)方案

    在日常的軟件開發(fā)中,我們經(jīng)常會(huì)遇到這樣的場(chǎng)景:需要從一個(gè)指定的 URL 地址下載文件,當(dāng)涉及到 Word 文檔這類復(fù)雜的二進(jìn)制格式時(shí),情況就變得不那么簡(jiǎn)單了,本文將深入探討在 C# 應(yīng)用程序中,如何高效、可靠地從 URL 下載 Word 文檔,需要的朋友可以參考下
    2025-12-12
  • C#自定義導(dǎo)出數(shù)據(jù)到Excel的類實(shí)例

    C#自定義導(dǎo)出數(shù)據(jù)到Excel的類實(shí)例

    這篇文章主要介紹了C#自定義導(dǎo)出數(shù)據(jù)到Excel的類,實(shí)例分析了C#操作Excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼

    C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼

    本篇文章主要介紹了C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼,C# WinForm控件的拖動(dòng)和縮放是個(gè)很有用的功能,有興趣的可以了解一下。
    2017-01-01
  • WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展

    WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展

    這篇文章主要介紹了WinForm實(shí)現(xiàn)基于BindingSource的方法擴(kuò)展,需要的朋友可以參考下
    2014-08-08
  • Unity shader實(shí)現(xiàn)多光源漫反射以及陰影

    Unity shader實(shí)現(xiàn)多光源漫反射以及陰影

    這篇文章主要為大家詳細(xì)介紹了shader實(shí)現(xiàn)多光源漫反射以及陰影,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C#使用Spire.XLS for .NET對(duì)Excel的行和列進(jìn)行分組和取消分組

    C#使用Spire.XLS for .NET對(duì)Excel的行和列進(jìn)行分組和取消分組

    在 Excel 工作表中,對(duì)行或列進(jìn)行分組可以將數(shù)據(jù)按項(xiàng)目分類,每一組顯示一個(gè)項(xiàng)目的相關(guān)信息,本文將介紹如何在 C# 和 VB.NET 中,使用 Spire.XLS for .NET對(duì) Excel 的行和列進(jìn)行分組和取消分組,需要的朋友可以參考下
    2026-01-01
  • C#連接SQL server數(shù)據(jù)庫命令的基本步驟

    C#連接SQL server數(shù)據(jù)庫命令的基本步驟

    文章講解了連接SQL Server數(shù)據(jù)庫的步驟,包括引入命名空間、構(gòu)建連接字符串、使用SqlConnection和SqlCommand執(zhí)行SQL操作,并強(qiáng)調(diào)參數(shù)化查詢、異常處理及連接池的重要性,感興趣的朋友跟隨小編一起看看吧
    2025-07-07
  • 基于C#動(dòng)態(tài)生成帶參數(shù)的小程序二維碼

    基于C#動(dòng)態(tài)生成帶參數(shù)的小程序二維碼

    在微信小程序管理后臺(tái),我們可以生成下載標(biāo)準(zhǔn)的小程序二維碼,提供主程序入口功能,在實(shí)際應(yīng)用開發(fā)中,小程序二維碼是可以攜帶參數(shù)的,可以動(dòng)態(tài)進(jìn)行生成,本文小編就給大家介紹一下如何基于C#動(dòng)態(tài)生成帶參數(shù)的小程序二維碼,感興趣的朋友可以參考下
    2023-12-12

最新評(píng)論

湘阴县| 枣强县| 利辛县| 鱼台县| 石家庄市| 苍梧县| 建水县| 镇宁| 巴林左旗| 衡东县| 海南省| 民乐县| 鹿泉市| 星子县| 文昌市| 海宁市| 漠河县| 会宁县| 绥德县| 岐山县| 璧山县| 瑞昌市| 永宁县| 百色市| 灵丘县| 巴塘县| 盐城市| 碌曲县| 雷州市| 普陀区| 华阴市| 商水县| 广河县| 郯城县| 富宁县| 蓬莱市| 门源| 娄底市| 临洮县| 凤城市| 宁阳县|