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

时间:2013-09-13 14:35:50

标签: c# for-loop stringbuilder

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

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();
    }
}

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

1 个答案:

答案 0 :(得分:8)

这是你的问题:

roll.AppendLine(Console.ReadLine());

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

只需将其更改为:

roll.Append(Console.ReadLine());

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