国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#學習筆記--foreach循環(huán)是怎么遍歷容器的?實戰(zhàn)帶你弄懂foreach原理

這篇具有很好參考價值的文章主要介紹了C#學習筆記--foreach循環(huán)是怎么遍歷容器的?實戰(zhàn)帶你弄懂foreach原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

上篇文章我們了解了IEnumerableIEnumeratorC#學習筆記–由淺至深理解IEnumerable和IEnumerator

這篇文章我們來研究foreach循環(huán)

foreach原理

foreach循環(huán)實際上是通過調用集合的GetEnumerator方法來獲取一個枚舉器,然后在每次迭代中調用枚舉器的MoveNext方法來遍歷集合的。當枚舉器的MoveNext方法返回false時,表示集合中沒有更多元素,循環(huán)結束。

也就是說,只要是實現了 IEnumerable 接口,都可以被 foreach 循環(huán)遍歷。

實現自己的容器

那有了這個理論基礎,我們趕緊來自己寫一個小容器吧

例子一:數組容器

  1. 先定義一個類,實現IEnumerable接口
public class MyNumbers : IEnumerable<int>
{
    private int[] numbers = new int[] { 1, 2, 3 };

    public IEnumerator<int> GetEnumerator()
    {
        return null;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
  1. 定義該類的迭代器
public class MyNumbers : IEnumerable<int>
{
    private int[] numbers = new int[] { 1, 2, 3 };

    public IEnumerator<int> GetEnumerator()
    {
        return new MyEnumerator(numbers);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

public class MyEnumerator : IEnumerator<int>
{
    private int[] numbers;
    private int index = -1;

    public MyEnumerator(int[] numbers)
    {
        this.numbers = numbers;
    }

    public int Current
    {
        get
        {
            return numbers[index];
        }
    }

    object IEnumerator.Current
    {
        get
        {
            return Current;
        }
    }

    public bool MoveNext()
    {
        index++;
        return index < numbers.Length;
    }

    public void Reset()
    {
        index = -1;
    }

    public void Dispose()
    {
        // No resources to dispose
    }
}

在這個例子中,我們創(chuàng)建了兩個類:MyNumbersMyEnumerator。
MyNumbers類實現了IEnumerable< int >接口,它定義了一個GetEnumerator方法,該方法返回一個實現了IEnumerator< int >接口的對象。
MyEnumerator類實現了IEnumerator< int >接口,它定義了用于遍歷序列的方法,例如MoveNextCurrent。

我們可以使用下面的代碼來遍歷這個自定義的迭代器類:

MyNumbers myNumbers = new MyNumbers();
foreach (int number in myNumbers)
{
    Console.WriteLine(number);
}

例子二:Student類

  1. 先定義一個Student類,實現IEnumerable接口
public class Student : IEnumerable
{
    private int id;
    private int age;
    private string name;

    public Student(int id_in, int age_in, string name_in)
    {
        id = id_in;
        age = age_in;
        name = name_in;
    }

    public IEnumerator GetEnumerator()
    {
        return null;
    }
}
  1. 定義該類的迭代器
public class Student : IEnumerable
{
    private int id;
    private int age;
    private string name;

    public Student(int id_in, int age_in, string name_in)
    {
        id = id_in;
        age = age_in;
        name = name_in;
    }

    public IEnumerator GetEnumerator()
    {
        return new StudentEnumerator(this);
    }

    private class StudentEnumerator : IEnumerator
    {
        private Student student;
        private int index = -1;

        public StudentEnumerator(Student student)
        {
            this.student = student;
        }

        public object Current
        {
            get
            {
                switch (index)
                {
                    case 0:
                        return student.id;
                    case 1:
                        return student.age;
                    case 2:
                        return student.name;
                    default:
                        throw new InvalidOperationException();
                }
            }
        }

        public bool MoveNext()
        {
            index++;
            return index < 3;
        }

        public void Reset()
        {
            index = -1;
        }
    }
}

在這個例子中,我們創(chuàng)建了兩個類:StudentStudentEnumerator。
Student 類實現了 IEnumerable 接口,它定義了一個返回 IEnumerator 對象的 GetEnumerator 方法。
StudentEnumerator 類實現了 IEnumerator 接口,它定義了用于遍歷序列的方法,例如 MoveNextCurrent

現在,我們可以使用 foreach 循環(huán)來遍歷 Student 類的實例了。例如:文章來源地址http://www.zghlxwxcb.cn/news/detail-438174.html

Student student = new Student(1, 18, "Alice");
foreach (var item in student)
{
    Console.WriteLine(item);
}

到了這里,關于C#學習筆記--foreach循環(huán)是怎么遍歷容器的?實戰(zhàn)帶你弄懂foreach原理的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【筆記】Java中for循環(huán)遍歷刪除操作

    在Java中,有些場景需要遍歷集合中的元素,然后根據條件進行刪除元素的操作。如果使用傳統(tǒng)的for循環(huán)遍歷方式來刪除元素,很可能出錯或發(fā)生意想不到的問題。推薦使用 迭代器iterator 完成 1. 推薦使用 迭代器方式****刪除 阿里規(guī)約:【強制】不要在 foreach 循環(huán)里進行元素的

    2024年02月11日
    瀏覽(15)
  • 遍歷用for還是foreach?

    遍歷用for還是foreach?

    遍歷用for還是foreach?這篇文章幫你輕松選擇! 在編程的世界里,我們經常需要對數據進行循環(huán)處理,常用的兩種方法就是:for循環(huán)和foreach循環(huán)。想象你站在一條裝滿寶貝的傳送帶前,你要親手檢查每一件寶貝。使用for循環(huán)就像是你親手控制傳送帶的速度和方向,而使用for

    2024年02月19日
    瀏覽(19)
  • 學習筆記|ADC反推電源電壓|掃描按鍵(長按循環(huán)觸發(fā))|課設級實戰(zhàn)練習|STC32G單片機視頻開發(fā)教程(沖哥)|第十八集:ADC實戰(zhàn)

    學習筆記|ADC反推電源電壓|掃描按鍵(長按循環(huán)觸發(fā))|課設級實戰(zhàn)練習|STC32G單片機視頻開發(fā)教程(沖哥)|第十八集:ADC實戰(zhàn)

    19.5.4 利用ADC第15通道(內部1.19V參考信號源)測量外部電壓或電池電壓 注意:這里的1.19V不是ADC 的基準電壓ADC-Vref+,而是ADC15通道的固定輸入信號源,1.19V STC32G系列ADC的第15通道用于測量內部參考信號源,由于內部參考信號源很穩(wěn)定,約為1.19V,且不會隨芯片的工作電壓的改變而變化

    2024年02月07日
    瀏覽(29)
  • JavaScript forEach 方法跳出循環(huán)

    這個問題平時工作中基本不會遇到,通常是面試時,有的面試官喜歡問這個,所以有了探討的意義。 首先我們來看看 for 循環(huán)是怎么處理跳出的。 JavaScript中,for循環(huán)可以使用 break 和 continue 來跳出: continue:跳出本次循環(huán) break:結束循環(huán) 了解了 for 循環(huán)跳出之后,forEach 如何

    2024年02月03日
    瀏覽(22)
  • foreach循環(huán)使用方法詳解

    在前面的文章中, 千鋒壹哥 給大家講解了for、while、do-while三種循環(huán)結構,并講解了如何跳出循環(huán)的幾種方式,比如break、continue、return等。但是截止到目前,與循環(huán)相關的內容還沒有完事,我們還有最后一哆嗦,今天 千鋒壹哥 會給大家講解另一種循環(huán)方式--增強for循環(huán)!這

    2023年04月24日
    瀏覽(20)
  • Java循環(huán)對比:傳統(tǒng)for循環(huán)、增強型for循環(huán)和forEach循環(huán)

    傳統(tǒng)的for循環(huán)是一種經典的循環(huán)結構,在Java中廣泛使用。 以下是傳統(tǒng)for循環(huán)的特點: 靈活控制:傳統(tǒng)for循環(huán)使用形式為for (初始化表達式; 終止條件; 步進表達式)的語法,可以手動控制循環(huán)的索引,并根據需要執(zhí)行自定義操作。 索引訪問:傳統(tǒng)for循環(huán)通過索引訪問集合或數

    2024年02月07日
    瀏覽(22)
  • HarmonyOS-ForEach:循環(huán)渲染

    HarmonyOS-ForEach:循環(huán)渲染

    ForEach接口基于數組類型數據來進行循環(huán)渲染,需要與容器組件配合使用,且接口返回的組件應當是允許包含在ForEach父容器組件中的子組件。例如,ListItem組件要求ForEach的父容器組件必須為List組件。 說明 從API version 9開始,該接口支持在ArkTS卡片中使用。 參數名 參數類型 必

    2024年01月25日
    瀏覽(15)
  • Kotlin基礎入門 - for、forEach 循環(huán)

    Kotlin基礎入門 - for、forEach 循環(huán)

    不論身處何方 for循環(huán)這種操作都隨處可見,鑒于大多數Android開發(fā)都是從Java轉到Kt的,所以我的思路是從Java的使用習慣來講一些Kt 的for、forEach 循環(huán)方式 基礎 for循環(huán) for循環(huán) 一般作用于 list、map數據集合 ,這里我直接創(chuàng)建了一個只讀List集合 提前了解 慣性 for循環(huán) 所謂的慣性

    2024年01月16日
    瀏覽(29)
  • kotlin forEach循環(huán)return/break

    kotlin forEach循環(huán)return/break ? [0, 1, 2] [0, 1, 2, 3] ? ? kotlin forEachIndexed arrayListOf<String>_zhangphil的博客-CSDN博客 Python for循環(huán)中的zip_python zip函數用于for循環(huán)_zhangphil的博客-CSDN博客。 https://blog.csdn.net/zhangphil/article/details/131003571 ?

    2024年02月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包