【问题标题】:IEnumerable Class Collection type conversion from ListList 的 IEnumerable Class Collection 类型转换
【发布时间】:2015-10-18 10:12:12
【问题描述】:

我正在尝试了解 IEnumerable 集合。我有一个基本的 WorkOrder 类,我想为它创建一个集合类。

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() 收到一个错误。它告诉我它不能将 List 转换为 Enumerator。

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);
    }
}

我没有完全理解这一点。我需要做什么才能进行转换?

【问题讨论】:

  • 你应该参考这篇文章:stackoverflow.com/questions/11296810/…
  • 除此之外,请问您为什么要自己构建一个集合类?为什么不直接使用List&lt;WorkOrder&gt;?除了简单地委派所有内容之外,您的收藏并没有太多作用。

标签: c# class ienumerable


【解决方案1】:

它不应该是:

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

只有

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

也就是说,IEnumerator 而不是IEnumerable 作为返回类型。

我不知道你的用例,但为什么不简单呢?:

public class WorkOrderCollection : List<WorkOrder>
{
}

【讨论】:

  • 我正在尝试找出最佳实践。每个(List vs IEnumerable)有什么好处?
  • 继承List&lt;T&gt;的代码更少。我会说当你不需要列表的功能时,你应该使用IEnumerable&lt;T&gt;,比如获取每个索引的值、添加新值等,但是你在其中使用了一个列表,而你的类只是一个包装器在实现IEnumerable&lt;T&gt; 的内部列表周围,在这种情况下,我看不到隐藏列表功能的理由,当您需要它们时,必须编写另一个包装器方法。不知道用例 - 我会继承列表
  • 如您所见,我不清楚类的集合方面。我已经一起破解了这个。我对如何做到这一点感到困惑。
  • 在进行测试时,最好在您的类型上使用尽可能少的方法。如果你扩展List,你会得到很多方法,你可能需要模拟出来才能正确测试你的代码。此外,它将访问代码与特定实现紧密耦合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
相关资源
最近更新 更多