認真CS丨列舉器

2021-08-19 14:41:21 字數 1796 閱讀 9882

實現了ienumerator介面的類稱為列舉器

using system.runtime.interopservices;

namespace system.collections

//// 摘要:

// 將列舉數推進到集合的下乙個元素。

//// 返回結果:

// 如果列舉數已成功地推進到下乙個元素,則為 true;如果列舉數傳遞到集合的末尾,則為 false。

//// 異常:

// t:system.invalidoperationexception:

// 建立列舉器後,已修改該集合。

bool movenext();

//// 摘要:

// 將列舉數設定為其初始位置,該位置位於集合中第乙個元素之前。

//// 異常:

// t:system.invalidoperationexception:

// 建立列舉器後,已修改該集合。

void reset();

}}

using system;

using system.collections;

namespace 列舉器

; ienumerator ie = myarray.getenumerator();

while (ie.movenext())}}

}

1、陣列可以按需提供乙個列舉器的物件

2、列舉器實現了ienumerator介面,所以它能做ienumerator介面定義的所有工作

3、對於有列舉器的型別而言,必須有乙個方法來獲取它,獲取乙個物件列舉器的方法是呼叫物件的getenumerator方法,實現getenumerator方法的型別叫做可列舉型別(enumerable),陣列是可列舉型別

所以在此案例中,採用getenumerator()方法將獲取到的陣列的列舉器賦值給定義為列舉器型別的ie,getenumerator()方法獲取到的是返回的列舉器的例項

呼叫方法時movenext要在前,current方法在後。否則會出現列舉器還處於陣列序列中第一項之前時,便先要輸出的current值,結果錯誤。它們的次序問題我們將通過下個綜合例項觀察

using system.runtime.interopservices;

namespace system.collections

}

可列舉類是指實現了ienumerable介面的類,ienumearable介面只有乙個成員getenumerator方法,它返回物件的列舉器

using system;

using system.collections;

class colorenumerator : ienumerator

public object current

}public bool movenext()

else

return false;

}public void reset()

}class spectrum : ienumerable

; public ienumerator getenumerator()

}class program}/*

* violet

blue

cyan

green

yellow

orange

red請按任意鍵繼續. . .

*/

認真CS丨堆疊

堆疊 stack 代表了乙個後進先出的物件集合。當向堆疊列表中新增一項,稱為推入元素。當從堆疊列表中移除一項時,稱為彈出元素。堆疊使用方法如下 stackobjs new stack objs.clear 移除 堆疊objs 所有元素 bool iscon objs.contains gameobj...

認真CS丨泛型

為什麼要用泛型?那麼先來看下面兩個功能相似的非泛型類 這個類都是int class myintstack 這個類都是float class myfloatstack 第乙個類實現了int型的功能,第二個類通過剪下 改類名 將int改為float實現float型功能,通過這種方式的變換實現float型...

認真CS丨yield迭代

首先我們來說下迭代的目的 迭代是將自定義類變為自定義類陣列,並遍歷它 在c 1.0和c 2.0這兩個版本中,c 2比c 1多了乙個更簡潔的迭代方法 1 定義單個類 2 定義這個類的陣列的列舉器方法 3 定義getenumerator方法 4 對該類陣列賦值,並例項化3getenumerator方法,...