程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#類可以通過foreach遍歷的原理,

C#類可以通過foreach遍歷的原理,

編輯:C#入門知識

C#類可以通過foreach遍歷的原理,


要使用foreach的遍歷的類首先要滿足的條件

1、 類要實現公共方法 public IEnumerator GetEnumerator(){},還可以繼承IEnumerable接口來實現這個方法

2、類實現了 public IEnumerator GetEnumerator(){}中,要返回一個對象用於遍歷的,當然這個對象必須繼承IEnumerator 接口

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Person p = new Person();
 6             p[0] = "小明";
 7             p[1] = "曉虹";
 8             p[2] = "小芳";
 9             p[3] = "小龍";
10             for (int i = 0; i < p.Count; i++)
11             {
12                 Console.WriteLine(p[i]);
13             }
14 15             Console.WriteLine("==========================================");
17             foreach (var name in p) 
18             {
19                 Console.WriteLine(name);
20             }
21             Console.ReadKey();
22         }
23     }
24 
25     internal class Person:IEnumerable
26     {
27         private List<string> listStudent =new List<string>();
28         public int Count {
29             get { return listStudent.Count; }
30         }
31 
32         public string this[int index]
33         {
34             get { return listStudent[index]; }
35             set
36             {
37                 if (index>=Count)
38                 {
39                     listStudent.Add(value);
40                 }
41                 else
42                 {
43                     listStudent[index] = value;
44                 }
45             }
46         }
47 
48 
49       
50         public IEnumerator GetEnumerator()
51         {
52            return new PersonIEnumerator(listStudent);
53         }
54     }
55     
56     class PersonIEnumerator:IEnumerator
57     {
58         public PersonIEnumerator(List<string> _listName)
59         {
60             listName = _listName;
61         }
62 
63         private List<string> listName;
64         private int index = -1;
65 
66         public object Current
67         {
68             get {return listName[index]; }
69         }
70 
71         public bool MoveNext()
72         {
73             index++;
74             if (index>=listName.Count)
75             {
76                 return false;
77             }
78             else
79             {
80                 return true;
81             }
82         }
83 
84         public void Reset()
85         {
86             index = -1;
87         }
88     }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved