如何解决如何迭代子类中的 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();
}
}
只需添加您需要的方法。如果您需要更多列表类型方法,请实现 ICollection
或 IList
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。