在C#中使用StringBuilder解释调试器有困难

fli*_*m57 4 c# stringbuilder for-loop

当我调试这个控制台应用程序时,它给出了一个奇怪的结果.显然我忽视了一些东西.

class Program
{
    static void Main(string[] args)
    {
        int ops = int.Parse(Console.ReadLine());           
        int inte = 0;
        StringBuilder roll = new StringBuilder();

        Operations(roll, inte, ops);
    }

    static void Operations(StringBuilder roll, int inte, int ops)
    {
        for (int i = 0; i < ops; i++)
        {
            roll.AppendLine(Console.ReadLine()); 

            inte = roll.ToString().IndexOf("^");

            if (inte == i)
                roll.Remove(i, 1);


            if (roll.ToString().IndexOf("!") == i)
                roll.Remove(i, 1);              
        }

        Console.WriteLine(roll.ToString());
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

对于输入,为第一个输入键入"3"(整数"inte"),为其他3个ReadLine条目键入"^ A","^ B""^ D".在循环的第一次迭代中,它将按预期删除^.但是在第二次迭代(i = 1)时,它将inte读为3.但它应该是1,因为在第二轮中,Stringbuilder已将"^ B"附加到A,因此它现在是"A ^ B".我正在尝试删除"^"(以及"!"s),因为stringbuilder正在附加字符串.为什么第二轮"inte"整数读数为3?

Jon*_*eet 8

这是你的问题:

roll.AppendLine(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)

你正在使用AppendLine,所以在第一次迭代时,它会附加"^ A",然后是回车符('\r')和换行符('\n').删除第一个字符后,字符串中仍然有3个字符.('A','\r''\n').这就是为什么^B\r\n" in the second iteration, you find the在索引3而不是索引1 附加^` 之后.

只需将其更改为:

roll.Append(Console.ReadLine());
Run Code Online (Sandbox Code Playgroud)

我怀疑你会得到你期待的结果.