如何在子 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 替换为:
- base.ToArray() - 这确实有效,但我认为列表的全部意义在于它是可枚举的。
- base.ToList() -“'System.Collections.Generic.List<SerializerTest.Invoice>' 不包含 'ToList'”的定义
为什么我需要将列表转换为数组以对其进行迭代?当然我应该能够遍历列表?
您应该使用 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();
}
}
只需添加您需要的方法即可。如果您需要更多列表类型方法,请实现 ICollection
或 IList
我有一个继承 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 替换为:
- base.ToArray() - 这确实有效,但我认为列表的全部意义在于它是可枚举的。
- base.ToList() -“'System.Collections.Generic.List<SerializerTest.Invoice>' 不包含 'ToList'”的定义
为什么我需要将列表转换为数组以对其进行迭代?当然我应该能够遍历列表?
您应该使用 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();
}
}
只需添加您需要的方法即可。如果您需要更多列表类型方法,请实现 ICollection
或 IList