額 為啥寫著東西?
有次面試去,因為用到的時候特別少 所以沒記住, 這個單詞 怎麼寫!
經典的面試題:
能用foreach遍歷訪問的物件的要求?
答: 該類實現IEnumetable 介面 宣告 GetEnumerator 方法。
這是統一的答案 非常正直 不是嘛?
但是 你真正的寫過 這個功能嗎?
今天看MSDN 關於 IEnumetable 第一次看這個介面 沒看明白 ! 怎麼辦? 自己跟著寫一次! 這個辦法非常好,我特推薦!
命名規則就隨便了, 別噴。
/// <summary> /// 首先繼承Ienumerable 介面 /// </summary> public class Ns : IEnumerable { private List<object> list = new List<object>(); // 先定義委會的集合物件 private string name; private string age; private int id; public string Name { get { return this.name; } set { this.list.Add(value); // 特殊操作 賦值的時候將其先新增到維護的集合物件中 this.name = value; } } public string Age { get { return this.age; } set { this.list.Add(value); // 特殊操作 賦值的時候將其先新增到維護的集合物件中 this.age = value; } } public int Id { get { return this.id; } set { this.list.Add(value); // 特殊操作 賦值的時候將其先新增到維護的集合物件中 this.id = value; } } /// <summary> /// 必須實現 GetEnumerator方法 更具返回型別 IEnumerator 來建立一個繼承 IEnumerator介面的內部類 /// </summary> /// <returns></returns> public IEnumerator GetEnumerator() { return new NsIEnumerator(this); } /// <summary> /// IEnumerator介面的內部類 PS 該類其實就是對 維護著的集合物件做遍歷操作的 /// </summary> class NsIEnumerator : IEnumerator { private int ids = -1; // 當前下標 private Ns n; // 傳遞過來的 需要遍歷的類 public NsIEnumerator(Ns N) { this.n = N; } public bool MoveNext() // 判斷是否遍歷完畢 { this.ids++; return (this.ids < this.n.list.Count); } public void Reset() // 將下標重置 { this.ids = -1; } public object Current // 這個就是通過變換的下標獲取到的對應的 資料 { get { return this.n.list[this.ids]; } } } static void Main(string[] args) { Ns n = new Ns(); n.Id = 1; n.Name = "liwen"; n.Age = "18"; foreach (var n1 in n) { Console.WriteLine(n1); } Console.ReadKey(); } }
沒啥特別的 ,就是覺得可能很多人也和我一樣知道這個功能 但是卻自己沒實現過。 貼上個來讓那些人看一下。方便大家嘛