如何在子 class 中迭代 List<T> base class?

How to iterates over a List<T> base class within the child class?

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

目前我有这个:

    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 替换为:

为什么我需要将列表转换为数组以对其进行迭代?当然我应该能够遍历列表?

您应该使用 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