2015-10-18 54 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