中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中foreach遍歷使用的示例

發布時間:2021-03-06 13:43:49 來源:億速云 閱讀:183 作者:小新 欄目:編程語言

這篇文章主要介紹了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,只能一一取得數組中的元素,并不能利用這種語句改變數組所存儲的元素。

C#中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<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);

}

從以上代碼來看,我們再進行foreach操作以上對象的時候都會構建一個Enumerator;也許有人會認為這點東西不需要計較,不過的確很多情況是不用關心;但如果通過內存分析到到的結果表明構建Enumerator的數量排在前幾位,那就真的要關心一下了。很簡單的一個應用假設你的應用要處理幾W的并發,而每次都存在幾次foreach那你就能計算出有多少對象的產生和回收?

看下一個簡單的分析圖,這里緊緊是存在一個List'1如果組件內部每個并發多幾個foreach又會怎樣?

C#中foreach遍歷使用的示例

改成for的結果又怎樣呢

C#中foreach遍歷使用的示例

感謝你能夠認真閱讀完這篇文章,希望小編分享的“C#中foreach遍歷使用的示例”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万山特区| 报价| 衡阳市| 鲜城| 太康县| 永寿县| 隆昌县| 文昌市| 镶黄旗| 温州市| 女性| 临泽县| 巫山县| 神池县| 镶黄旗| 寿光市| 札达县| 呼玛县| 镇平县| 资源县| 广宁县| 双桥区| 海南省| 营山县| 雷州市| 宜昌市| 余江县| 南京市| 康保县| 岚皋县| 红安县| 砀山县| 杭锦旗| 马公市| 文登市| 富川| 高安市| 宁夏| 沙坪坝区| 江都市| 长阳|