微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何迭代子类中的 List<T> 基类?

如何解决如何迭代子类中的 List<T> 基类?

我有一个继承List的集合类。我想要一个可以迭代基类列表中的项目的类的方法

目前我有这个:

    public class Invoices : List<Invoice>
    {
        public string ToString()
        {
            string cop = "";
            int i;
            Invoice oInvoice;

            cop += string.Format("Invoices.Count = {0}\r\n",base.Count);

            foreach (Invoice oInvoice in base)
            {
                cop += oInvoice.ToString();
            }

            return cop;
        }
    }

但是我在 foreach 语句中的 base 上得到编译时错误,“在此上下文中使用关键字 'base' 无效”。

我尝试将 base 替换为:

  • base.ToArray() - 这确实有效,但我认为 List 的全部意义在于它是可枚举的。
  • base.ToList() - “'System.Collections.Generic.List' 不包含 'ToList' 的定义”

是否需要将 List 转换为 Array 以对其进行迭代?我当然应该能够遍历 List 吗?

解决方法

您应该使用 this 关键字:

public class Invoices : List<Invoice>
{
    public string ToString()
    {
        string cOP = "";
        int i;
        Invoice oInvoice;

        cOP += string.Format("Invoices.Count = {0}\r\n",base.Count);

        foreach (Invoice oInvoice in this)
        {
            cOP += oInvoice.ToString();
        }

        return cOP;
    }
}
,

这是一个更常用的方法

public class Invoices : IEnumerable<Invoice>
{
   private readonly List<Invoice> _invoices = new List<Invoice>();

   public IEnumerator<Invoice> GetEnumerator() => _invoices.GetEnumerator(); 
   IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();

   public override string ToString()
   {
      var sb = new StringBuilder();

      sb.AppendLine($"Invoices.Count = {_invoices.Count}");

      foreach (var oInvoice in _invoices)
         sb.Append(oInvoice);

      return sb.ToString();
   }  
}

只需添加您需要的方法。如果您需要更多列表类型方法,请实现 ICollectionIList

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。