2015-10-18 46 views
0

我想了解IEnumerable集合。我有一個基本的WorkOrder類,我想爲它創建一個集合類。IEnumerable類從列表集合類型轉換

WorkOrder.cs

public class WorkOrder 
{ 
    public string WONumber { get; private set; } 
    public string WIP { get; private set; } 

    public WorkOrder() 
    { 
     WONumber = "384327"; 
     WIP = "3483"; 
    } 
} 

我已經開始集合類,但我在this.workorders.GetEnumerator()得到一個錯誤。它告訴我它不能將列表轉換爲枚舉器。

public class WorkOrderCollection : IEnumerable<WorkOrder> 
{ 
    private List<WorkOrder> workorders = new List<WorkOrder>(); 

    public IEnumerable<WorkOrder> GetEnumerater() 
    { 
     return this.workorders.GetEnumerator(); 
    } 

    public WorkOrderCollection() 
    { 
    } 

    public void Add(WorkOrder aWorkOrder) 
    { 
     workorders.Add(aWorkOrder); 
    } 

    public void Remove(int index) 
    { 
     if (index > workorders.Count - 1 || index < 0) 
    { 
     System.Windows.Forms.MessageBox.Show("Index not valid!"); 
    } 
    else 
    { 
     workorders.RemoveAt(index); 
    } 
} 

我不完全理解這一點。我需要做些什麼來完成這個轉換?

+1

你應該參考這個帖子:HTTPS://stackoverflow.com/questions/11296810/how-do-i-實施 - ienumerablet –

+0

除此之外,我可以問你爲什麼要自己建立一個集合課嗎?爲什麼不直接簡單地使用'List '?除了簡單地委託一切,你的收藏並沒有太大的作用。 – Alejandro

回答

2

它不應該是:

public IEnumerable<WorkOrder> GetEnumerater() 
{ 
    return this.workorders.GetEnumerator(); 
} 

只有

public IEnumerator<WorkOrder> GetEnumerater() 
{ 
    return this.workorders.GetEnumerator(); 
} 

是的,IEnumerator代替IEnumerable作爲返回類型。

我不知道你的使用情況,但爲什麼不乾脆?:

public class WorkOrderCollection : List<WorkOrder> 
{ 
} 
+0

我想弄清楚什麼是最佳實踐。每個(List vs IEnumerable)有什麼好處? – Beengie

+0

繼承'List '的代碼較少。當你不需要列表的功能時,我會說你應該使用'IEnumerable ',比如爲每個索引獲取值,添加新值等,但是你在裏面使用一個列表,而你的類只是一個在實現'IEnumerable '的內部列表中封裝,在這種情況下,我沒有看到隱藏列表功能的原因,當你需要它們時,必須寫入另一個封裝器方法。不知道用例 - 我會繼承列表 –

+0

正如你所看到的,我不清楚類的集合。我一起黑了。我很困惑我會如何做到這一點。 – Beengie