C# IEnumerable无法计算表达式,因为当前线程处于堆栈溢出状态
我正在编写一个应用程序,它接收Wireshark文件(Pcap、Snopp、Pcapng…),打开它并读取所有数据包 我的基类:C# IEnumerable无法计算表达式,因为当前线程处于堆栈溢出状态,c#,enumerable,C#,Enumerable,我正在编写一个应用程序,它接收Wireshark文件(Pcap、Snopp、Pcapng…),打开它并读取所有数据包 我的基类: public abstract class WiresharkFile { ... } public IEnumerator<WiresharkFilePacket> GetEnumerator() { return GetEnumerator(); } 以及实现的所有子类IEnumerable: public class Libpcap
public abstract class WiresharkFile
{
...
}
public IEnumerator<WiresharkFilePacket> GetEnumerator()
{
return GetEnumerator();
}
以及实现的所有子类IEnumerable
:
public class Libpcap : WiresharkFile, IDisposable, IEnumerable<WiresharkFilePacket>
{
....
}
然后,当我想在文件上循环并读取数据包时:
foreach (var packet in wiresharkFile)
{
...
}
我得到这个错误:
foreach语句无法对WiresharkFile类型的变量进行操作
因为WiresharkFile'不包含的
“GetEnumerator”
所以我在WiresharkFile基类中添加了这个函数:
public abstract class WiresharkFile
{
...
}
public IEnumerator<WiresharkFilePacket> GetEnumerator()
{
return GetEnumerator();
}
您看到的是
StackOverflowException
,因为您正在调用自己
public IEnumerator<WiresharkFilePacket> GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator GetEnumerator()
{
返回GetEnumerator();
}
您需要正确地实现一个迭代器才能使其工作。例如:
wiresharkFile = new Libpcap(file);
public IEnumerator<WiresharkFilePacket> GetEnumerator()
{
for (int i = 0; i < 10; i++)
yield return new WiresharkFilePacket();
}
public IEnumerator GetEnumerator()
{
对于(int i=0;i<10;i++)
产生并返回新的WiresharkFilePacket();
}
您的
WiresharkFile
应该有一些内部集合,它可以迭代。它是从pcap解析出来并返回的数据包。简单地创建一个GetEnumerator
方法不会起任何作用。更多信息,如果所有派生类都提供了GetEnumerator()
方法,并且对将来的任何派生类都要求使用该方法没有问题,但是基类不能有意义地定义一个方法,那就是将其标记为abstract
public abstract IEnumerator<WiresharkFilePacket> GetEnumerator();
公共抽象IEnumerator GetEnumerator();
这样就足以在基类上实现
IEnumerable
,您还不需要完整的定义。请参见我的编辑,我的类使用私有类实现IEnumerable,那么,如何将其转换为普通IEnumerable?请参见我的编辑,我的类使用私有类实现IEnumerable,所以,如何将其转换为普通IEnumerable?