在 C# 中使用 StringBuilder 解释调试器时遇到困难

本文关键字:调试器 遇到 解释 StringBuilder | 更新日期: 2023-09-27 18:31:09

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

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"),键入"^A"、"^B"^D"作为其他 3 个 ReadLine 条目。在循环的第一次迭代中,它将按预期删除 ^。但在第二次迭代 (i =1) 时,它读作 inte 为 3。但它应该是 1,因为在第二轮中,字符串生成器将 "^B" 附加到 A,所以它现在是 "A^B"。我正在尝试删除"^"(和"!s也是),当字符串生成器附加字符串时输入它们时。为什么第二轮的"inte"整数读数为 3?

在 C# 中使用 StringBuilder 解释调试器时遇到困难

这是你的问题:

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

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