下面的**示例闡釋如何編寫可與foreach一起使用的非泛型集合類。 該類是字串標記化拆分器,類似於 c 執行時函式 strtok_s。
1
using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;
5using
system.collections;67
namespace
macaco.study.consoleproject827
28///
29///
返回乙個迴圈訪問集合的列舉器。
30///
31///
可用於迴圈訪問集合的 system.collections.ienumerator 物件。
32public
ienumerator getenumerator()
3336
37///
38///
迴圈訪問集合的列舉器類
39///
40public
class
each_inheritenum:ienumerator
4156
57///
58///
返回當前索引所對應的物件
59///
60public
object
current
6163}64
65///
66///
設定下一輪迴圈的索引位置
67///
68///
返回是否繼續下一輪迴圈
69public
bool
movenext()
7076
else
7780}81
82///
83///
重置當前索引位置
84///
85public
void
reset()
8689}90
}91}92
在 c# 中,集合類不一定要從 ienumerable 和 ienumerator 繼承以便與 foreach 相容。 只要此類具有必需的 getenumerator、 movenext、 reset 和 current 成員,就可 foreach 與一起使用。 省略介面有乙個好處:您可以將 current 的返回型別定義得比 object 更為明確,從而提供型別安全。
例如以下**:
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
macaco.study.consoleproject716
17///
18///
返回乙個迴圈訪問集合的列舉器。
19///
20///可用於迴圈訪問集合的each_noinheritenum物件。
21public
each_noinheritenum getenumerator()
2225
26///
27///
迴圈訪問集合的列舉器類
28///
29public
class
each_noinheritenum
3039
40///
41///
返回當前索引所對應的字串
42///
43public
string
current
4446}47
48public
bool
movenext()
4955
else
5659}60
61public
void
resset()
6265}66
}67}68
下現是呼叫這兩個集合類的主函式:
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
macaco.study.consoleproject714
private
static
void
each_test()
15);
1819
console.writeline(
"-------inherit result-------");
20foreach
(string
str
inea)
2124
console.writeline(
"----------------------------");
2526
console.writeline();
2728
//該類沒有繼承自ienumerable,但是具有getenumerator方法
29each_noinherit eano
=new
each_noinherit(
"this is each_no_inherit test",
newchar
);30
31console.writeline(
"------no inherit result-----");
32foreach
(string
str
ineano)
3336
console.writeline(
"----------------------------");
37}38/*
output:
39* -------inherit result-------
40* this
41* is
42* each
43* inherit
44* test
45* ----------------------------
46*
47* ------no inherit result-----
48* this
49* is
50* each
51* no
52* inherit
53* test
54* ----------------------------
55*/
5657
/*58
*第一種:實現ienumerable和ienumerator介面
59*第二種:不實現任何介面,但具備以上兩個介面中需要實現的方法
60*優缺點:
61* 1.第一種集合類能夠與其他公共語言執行時 相容語言的 foreach 語句或等效項互動操作,而第二種不能。
62* 2.第一種集合類不可以將 current 的返回型別定義得比 object 更為明確,因此無法提供型別安全,
63* 而第二種集合類可以將current的返回定義為string從而能夠提供更好的型別安全。
64*/65}
66}67
foreach迴圈遍歷類陣列
using system using system.collections using system.collections.generic using system.linq using system.text using system.threading.tasks 使用foreach迴圈遍歷乙...
C 學習筆記(三) ForEach遍歷集合
1.foreach遍歷集合 1 簡單來說ienumerable是乙個宣告式的介面,宣告實現該介面的類就是 可迭代的enumerable 但並沒用說明如何實現迭代器 iterator 2 而ienumerator介面是實現式介面,它宣告實現該介面的類就可以作為乙個迭代器iterator.3 乙個col...
集合的基本方法和foreach遍歷
是list set 的父類。基本方法又add e e 新增,remove 李四 刪除 boolean型別 size 看大小 int 型別 contions 王五 是否包含 boolean型別 isempy 是否為空 boolean型別 collectioncoll new arraylisy 多型實...