GetEnumerator 在此上下文中不存在
GetEnumerator does not exist in this context
我已经实现了自定义链表,但在实现 IEnumerator<> 时遇到问题。具体来说,编译器告诉我 The name "GetEnumerator" does not exist in the current context
。我觉得我正在按照我在众多 Whosebug 帖子和教程中看到的方式实现它,我错过了什么?
这是我的数据结构:
namespace TestReportCreator_v3
{
public class FindingsTable : IEnumerable<string>
{
private Node head, mark;
public class Node
{
public string description; //covers weakness, retinaDesc, nessusDesc
public string riskLevel; //covers impactLevel, retinaRisk, nessusRisk
public string boxName; //box name results apply to
public string scanner; //wassp, secscn, retina, nessus
public string controlNumber; //ia control number impacted, wassp and secscn only
public string fixAction; //comments, retinaFix, nessusSolu
public string auditID; //nessus plugin, retina AuditID, wassp/secscn test number
public Node next;
public Node(string auditID, string riskLevel, string boxName, string scanner, string controlNumber, string fixAction, string description, Node next)
{
this.description = description;
this.riskLevel = riskLevel;
this.boxName = boxName;
this.scanner = scanner;
this.controlNumber = controlNumber;
this.fixAction = fixAction;
this.auditID = auditID;
this.next = next;
}
}
...insert, delete, update, save methods...
public IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
var node = mark;
while (node != null)
{
yield return node.riskLevel;
node = node.next;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
IEnumerable<string>.GetEnumerator()
是显式接口实现,所以需要在实例上调用,作为接口访问。最简单的方法是投射 this
:
return ((IEnumerable<string>)this).GetEnumerator();
请参阅 How to call explicit interface implementation methods internally without explicit casting? 了解替代方案。
我已经实现了自定义链表,但在实现 IEnumerator<> 时遇到问题。具体来说,编译器告诉我 The name "GetEnumerator" does not exist in the current context
。我觉得我正在按照我在众多 Whosebug 帖子和教程中看到的方式实现它,我错过了什么?
这是我的数据结构:
namespace TestReportCreator_v3
{
public class FindingsTable : IEnumerable<string>
{
private Node head, mark;
public class Node
{
public string description; //covers weakness, retinaDesc, nessusDesc
public string riskLevel; //covers impactLevel, retinaRisk, nessusRisk
public string boxName; //box name results apply to
public string scanner; //wassp, secscn, retina, nessus
public string controlNumber; //ia control number impacted, wassp and secscn only
public string fixAction; //comments, retinaFix, nessusSolu
public string auditID; //nessus plugin, retina AuditID, wassp/secscn test number
public Node next;
public Node(string auditID, string riskLevel, string boxName, string scanner, string controlNumber, string fixAction, string description, Node next)
{
this.description = description;
this.riskLevel = riskLevel;
this.boxName = boxName;
this.scanner = scanner;
this.controlNumber = controlNumber;
this.fixAction = fixAction;
this.auditID = auditID;
this.next = next;
}
}
...insert, delete, update, save methods...
public IEnumerator<string> IEnumerable<string>.GetEnumerator()
{
var node = mark;
while (node != null)
{
yield return node.riskLevel;
node = node.next;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
}
IEnumerable<string>.GetEnumerator()
是显式接口实现,所以需要在实例上调用,作为接口访问。最简单的方法是投射 this
:
return ((IEnumerable<string>)this).GetEnumerator();
请参阅 How to call explicit interface implementation methods internally without explicit casting? 了解替代方案。