C#中實現列舉數
我們知道在.net中有兩個介面用來實現列舉數的,它就是System.Collections 名稱空間 下的 IEnumerable和IEnumerator介面。簡單地說IEnumerator介面是用來實現列舉器,而IEnumerable介面是用來公開枚列舉器的。
下面來看看MSDN上是怎麼說的。
IEnumerator 介面
支援對非泛型集合的簡單迭代。也就是列舉
方法
MoveNext 將列舉數推進到集合的下一個元素。
Reset 將列舉數設定為其初始位置,該位置位於集合中第一個元素之前。
屬性
Current 獲取集合中的當前元素。
這個介面是用來實現列舉器的,如下程式碼
Code
1public class PeopleEnum : IEnumerator
2{
3 public Person[] _people;
4
5 // Enumerators are positioned before the first element
6 // until the first MoveNext() call.
7 int position = -1;
8
9 public PeopleEnum(Person[] list)
10 {
11 _people = list;
12 }
13
14 public bool MoveNext()
15 {
16 position++;
17 return (position < _people.Length);
18 }
19
20 public void Reset()
21 {
22 position = -1;
23 }
24
25 public object Current
26 {
27 get
28 {
29 try
30 {
31 return _people[position];
32 }
33 catch (IndexOutOfRangeException)
34 {
35 throw new InvalidOperationException();
36 }
37 }
38 }
39}
40
上面是對IEnumerator介面的實現,現在有了一個PeopleEnum的列舉器,它用來列舉People物件。
那IEnumerable介面有什麼用了,它就是用來公開列舉器的。如下程式碼:
方法
GetEnumerator 返回一個迴圈訪問集合的列舉數。
Code
1using System;
2using System.Collections;
3
4public class Person
5{
6 public Person(string fName, string lName)
7 {
8 this.firstName = fName;
9 this.lastName = lName;
10 }
11
12 public string firstName;
13 public string lastName;
14}
15
16public class People : IEnumerable
17{
18 private Person[] _people;
19 public People(Person[] pArray)
20 {
21 _people = new Person[pArray.Length];
22
23 for (int i = 0; i < pArray.Length; i++)
24 {
25 _people[i] = pArray[i];
26 }
27 }
28
29 public IEnumerator GetEnumerator()
30 {
31 return new PeopleEnum(_people);
32 }
33}
34
35public class PeopleEnum : IEnumerator
36{
37 public Person[] _people;
38
39 // Enumerators are positioned before the first element
40 // until the first MoveNext() call.
41 int position = -1;
42
43 public PeopleEnum(Person[] list)
44 {
45 _people = list;
46 }
47
48 public bool MoveNext()
49 {
50 position++;
51 return (position < _people.Length);
52 }
53
54 public void Reset()
55 {
56 position = -1;
57 }
58
59 public object Current
60 {
61 get
62 {
63 try
64 {
65 return _people[position];
66 }
67 catch (IndexOutOfRangeException)
68 {
69 throw new InvalidOperationException();
70 }
71 }
72 }
73}
74
75
這樣就可以用foreach語句訪問people類中的person物件。這也是一個疊代器設計模式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-620407/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# 中的“智慧列舉”:如何在列舉中增加行為C#
- 如何獲得 C# 列舉數個數C#
- OC中列舉寫法 以及 字串型別列舉實現探索字串型別
- C#:列舉C#
- C#中列舉型別的使用C#型別
- 在C#中對列舉進行位運算--列舉組合C#
- 列舉GCRoots的實現GC
- C# 列舉與位列舉概述C#
- 如何遍列 C# 列舉數的名稱與值C#
- 深入淺出 Java 中列舉的實現原理Java
- c#列舉轉換C#
- c++11 實現列舉值到列舉名的轉換C++
- 認知列舉(C# Enum)C#
- 遞迴實現指數型列舉遞迴
- js模擬實現列舉效果JS
- C# 列舉常用方法淺析C#
- Java 利用列舉實現單例模式Java單例模式
- 透過列舉enum實現單例單例
- java中的列舉Java
- 7.1 實現程式記憶體塊列舉記憶體
- 小技巧分享:在 Go 如何實現列舉?Go
- C# 列舉遍歷和轉換C#
- C#實現棧和佇列C#佇列
- 深入V8引擎-列舉+位運算實現引數配置
- 使用 CliWrap 讓C#中的命令列互動舉重若輕C#命令列
- C#二維陣列在SLG中的實現和使用C#陣列
- C#中如何獲取二維陣列的行數和列數?C#陣列
- 基於註解的 PHP 列舉類實現PHP
- Java一個列舉類的2種實現。Java
- java中列舉(Enum)使用Java
- C#實現控制元件陣列C#控制元件陣列
- 使用C#實現順序佇列C#佇列
- 熱更學習筆記--toLau中lua指令碼對C#中列舉和陣列的訪問筆記指令碼C#陣列
- c#列舉與陣列初始化及使用小記C#陣列
- C#中類的使用舉例C#
- 用Swift列舉完美實現3Dtouch快捷操作Swift3D
- java中的列舉型別Java型別
- 聊聊TypeScript中列舉物件(Enum)TypeScript物件