在 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?
这是你的问题:
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());
我怀疑你会得到你期待的结果。