Exception 字符串中的mscorlib.dll异常。包含

Exception 字符串中的mscorlib.dll异常。包含,exception,contains,mscorlib,Exception,Contains,Mscorlib,我在part_1方法的第一行得到mscorlib.dll异常,但仅当我编写示例(“xx”)时。只有一个(“x”)就一切正常。我知道它已连接到我阅读的文件,但不知道为什么应用程序会因如此“小”的更改而崩溃,以及如何修复它。这个文件有30多万行。 代码是: public partial class Form1 : Form { private int lines_number = 0; public Form1() { InitializeComponent(

我在part_1方法的第一行得到mscorlib.dll异常,但仅当我编写示例(“xx”)时。只有一个(“x”)就一切正常。我知道它已连接到我阅读的文件,但不知道为什么应用程序会因如此“小”的更改而崩溃,以及如何修复它。这个文件有30多万行。 代码是:

public partial class Form1 : Form
{
    private int lines_number = 0;
    public Form1()
    {
        InitializeComponent();


        foreach (string f in Directory.GetFiles(@"path_to_folder"))
        {
            string file_name = "something";
            string ip = "something";
            string[] lines = File.ReadAllText(f).Split('\n');
            part_1(lines_number, lines, ip);
            lines_number = 0;
        }
    }

    private void part_1(int i, string[] lines, string ip)
    {
        if (lines[i].Contains("xx"))
        {
            lines_number++;
            string program = "something";
            string start = "something";
            part_2(lines_number, program, start, lines, ip);
        }
        else
        {
            lines_number++;
            if (lines_number < lines.Count())
                part_1(lines_number, lines, ip);
        }
    }
    private void part_2(int i, string program, string start, string[] lines, string ip)
    {
        if (lines[i+1].Contains("something"))
        {
            //do something
        }
    }

}
公共部分类表单1:表单
{
专用整数行数=0;
公共表格1()
{
初始化组件();
foreach(Directory.GetFiles(@“path\u to\u folder”)中的字符串f)
{
字符串文件\u name=“something”;
字符串ip=“某物”;
string[]line=File.ReadAllText(f).Split('\n');
第1部分(线路编号、线路、ip);
行数=0;
}
}
私有无效部分_1(整数i,字符串[]行,字符串ip)
{
如果(第[i]行包含(“xx”))
{
行数++;
字符串程序=“某物”;
string start=“something”;
第2部分(线路编号、程序、起点、线路、ip);
}
其他的
{
行数++;
如果(行数<行数())
第1部分(线路编号、线路、ip);
}
}
私有无效部分_2(int i、字符串程序、字符串开始、字符串[]行、字符串ip)
{
如果(第[i+1]行)包含(“某物”))
{
//做点什么
}
}
}

我清除了代码中不需要的所有内容

异常消息是什么?mscorlib.dll中发生类型为“System.StackOverflowException”的未处理异常part1()方法是递归的,堆栈深度为O(n)。递归算法应仅用于O(logN)算法或严格约束深度或保证尾部递归优化。您的代码和数据不提供这些保证。改用foreach循环。是的,它应该是解决方案。我并没有这样做,因为代码看起来很凌乱,过一段时间后可能很难使用它。我还需要检查第2部分中的下一行,因为您可以看到“lines[I+1]”,这在foreach中并不容易。递归必须通过“if(lines_number