C# 尽管回路自身条件发生变化,但仍会卡住

C# 尽管回路自身条件发生变化,但仍会卡住,c#,C#,我试图删除字符串可用部分前面的空格和某些符号。我使用的是while循环和if语句。while循环在if语句之前运行,但尽管如此,只有当while和if条件都为true时,它才会卡在while循环中 string newNameTemp = " [i]"; while (newNameTemp.StartsWith(" ")) { newNameTemp.Remove(0,1); Console.WriteLine("1"); } if (newNameTemp.StartsWit

我试图删除字符串可用部分前面的空格和某些符号。我使用的是while循环和if语句。while循环在if语句之前运行,但尽管如此,只有当while和if条件都为true时,它才会卡在while循环中

string newNameTemp = " [i]";
while (newNameTemp.StartsWith(" ")) {
    newNameTemp.Remove(0,1);
    Console.WriteLine("1");
}
if (newNameTemp.StartsWith("[i]")) {
    newNameTemp.Remove(0,3);
    Console.WriteLine("2");
}

这只是在控制台中重复写入1,如文档中所述

.Remove()
不会更改原始字符串,但会返回一个新的已更改字符串,因此将代码更改为

string newNameTemp = " [i]";
while (newNameTemp.StartsWith(" ")) {
    newNameTemp = newNameTemp.Remove(0,1);
    Console.WriteLine("1");
}
if (newNameTemp.StartsWith("[i]")) {
    newNameTemp = newNameTemp.Remove(0,3);
    Console.WriteLine("2");
}

应该可以解决您的问题。

删除空格时,需要将变量重新分配给自身

string newNameTemp = " [i]";
while (newNameTemp.StartsWith(" ")) {
    newNameTemp = newNameTemp.Remove(0,1);
    Console.WriteLine("1");
}
if (newNameTemp.StartsWith("[i]")) {
    newNameTemp = newNameTemp.Remove(0,3);
    Console.WriteLine("2");
}
例如:


只需将给定字符串中的所有空格替换为“”,并删除特殊字符

Remove
返回一个新字符串-它不会更改给定的字符串。您需要
newNameTemp=newNameTemp.Remove(0,1)
如果要删除开头的空格,也可以使用
newNameTemp=newNameTemp.TrimStart()
正如大家所指出的,
Remove
不会更改原始字符串,它只是创建一个新字符串并删除一些字符。这只是更一般情况的一个简单例子。字符串是不可变的。没有任何字符串方法可以在创建字符串后对其进行修改。请添加对代码的进一步解释,这样您的答案就不会被认为是低质量的。
string newNameTemp = " [i]";
        newNameTemp = newNameTemp.Replace(" ", "");           
        if (newNameTemp.StartsWith("[i]"))
        {
            newNameTemp = newNameTemp.Remove(0, 3);
            Console.WriteLine("2");
        }