日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#迭代器方法介紹_C#教程

作者:Unity使人頭禿~~~ ? 更新時間: 2022-05-06 編程語言

1.迭代器方法

可以使用foreach循環語句進行的迭代的方法,稱為可迭代方法,或者迭代器方法。

迭代器用法法介紹。

  迭代器用于依次返回每個元素,一般用于foreach循環語句。迭代器方法需要使用yield return語句。

?yield return 語句介紹:

  保持代碼的當前位置,在下一次調用迭代器方法時執行。

?迭代方法在使用過程中左右步驟對應。yield return語句主要是返回一個結果作為函數調用的結果。并記錄當前運行位置,當下次函數被調用時,在當前位置執行這個函數。在迭代塊中除了yield return外,不允許出現普通的return語句。

迭代方法使用的命名空間為using System.Collections.Generic;

下面代碼為迭代器使用的具體代碼:

class Program
{
? ? public static IEnumerable Fibs()
? ? {
? ? ? ? int f1 = 1, f2 = 2;
? ? ? ? while (true)
? ? ? ? {
? ? ? ? ? ? yield return f1;
? ? ? ? ? ? yield return f2;
? ? ? ? ? ? f1 += f2;
? ? ? ? ? ? f2 += f1;
? ? ? ? }
? ? }
? ? static void Main(string[] args)
? ? {
? ? ? ? foreach (int i in Fibs())
? ? ? ? ? ? if (i < 20)
? ? ? ? ? ? ? ? Console.WriteLine("{0}", i);
?
? ? ? ? ? ? else
? ? ? ? ? ? ? ? break;
? ? ? ? Console.ReadKey();
? ? }?
}

 IEnumerable是泛型定義的里面的int關系到你迭代對象yield return返回值的類型。如果你定義IEnumerable那么你返回的值是int類型,如果你定義IEnumerable那么你的返回值是string類型以此類推。如果你想以某個條件結束方法。可以使用外面的條件如上圖所示。也可以使用yield break。

class Program
{
? ? public static IEnumerable Fibs()
? ? {
? ? ? ? string f1 = "1", f2 = "2";
? ? ? ? while (true)
? ? ? ? {
? ? ? ? ? ? yield return f1;
? ? ? ? ? ? yield return f2;
? ? ? ? ? ? f1 += f2;
? ? ? ? ? ? f2 += f1;
? ? ? ? ? ? if (f1.Length > 8)
? ? ? ? ? ? ? ? yield break;
? ? ? ? }
? ? }
?
? ? static void Main(string[] args)
? ? {
? ? ? ? foreach (string i in Fibs())
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? Console.WriteLine("{0}", i);
? ? ? ? Console.ReadKey();
? ? }?
}

2.手動實現迭代器方法

首先是通過使用接口IEnumerable的方式,然后編寫IEnumerator GetEnumerator()的方式。在代碼中控制索引位置,和循環次數。如果索引位置出錯則使用代碼throw new NotImplementedException()報錯。

using System;
using System.Collections;
using System.Collections.Generic;
?
?
namespace test02
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? object [] e = new object[5] { 1, 2, 3, 4, 5 };
? ? ? ? ? ? Itear01 s = new Itear01(e,2);
? ? ? ? ? ? foreach (object i in s)
? ? ? ? ? ? ? ? ? ? Console.WriteLine("{0}", i);
? ? ? ? ? ? Console.ReadKey();
? ? ? ? }?
? ? }
?
? ? public class Itear01 : IEnumerable
? ? {
? ? ? ? object[] values;
? ? ? ? int StartPoint=-1;
? ? ? ? int current=0;
? ? ? ? public Itear01(object[] values,int StartPoint)
? ? ? ? {
? ? ? ? ? ? this.values = values;
? ? ? ? ? ? this.StartPoint = StartPoint;
? ? ? ? }
? ? ? ? public IEnumerator GetEnumerator()
? ? ? ? {
? ? ? ? ? ? if(this.StartPoint==-1)
? ? ? ? ? ? ? ? throw new NotImplementedException();
? ? ? ? ? ? while(true)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? yield return this.values[StartPoint];
? ? ? ? ? ? ? ? StartPoint = (StartPoint + 1) % values.Length;
? ? ? ? ? ? ? ? current++;
? ? ? ? ? ? ? ? if (current == values.Length)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? ?
? ? ? ? }
? ? }
}

原文鏈接:https://www.cnblogs.com/guiyan/p/15970008.html

欄目分類
最近更新