【发布时间】:2020-06-28 11:15:54
【问题描述】:
我正在创建一个控制台应用程序,用户可以在该应用程序上输入火车站并找到火车站。为此,我每次都将Console.ReadKey().Key 附加到一个字符串。
当用户输入不正确的字母时,我希望ConsoleKey.Backspace 删除字符串中的最后一个字符。
private void SetDepartingFrom()
{
String searchQuery = "";
ConsoleKey keyIn;
while ((keyIn = readKey(searchQuery)) != ConsoleKey.Enter)
{
if (keyIn == ConsoleKey.Backspace)
{
searchQuery.TrimEnd(searchQuery[searchQuery.Length - 1]);
}
else
{
searchQuery += keyIn.ToString();
}
}
}
private ConsoleKey readKey(String searchQuery)
{
Console.Clear();
Console.WriteLine("Stations Found:");
if (searchQuery != "")
App.Stations.FindAll(x => x.GetName().ToUpper().Contains(searchQuery.ToUpper())).ForEach(x => Console.WriteLine(x.GetName()));
else
Console.WriteLine("No Stations found...");
Console.Write("Search: " + searchQuery);
return Console.ReadKey().Key;
}
我尝试了以下方法:
if (keyIn == ConsoleKey.Backspace)
searchQuery.TrimEnd(searchQuery[searchQuery.Length - 1]);
if (keyIn == ConsoleKey.Backspace)
searchQuery.Remove(searchQuery.Length -1);
if (keyIn == ConsoleKey.Backspace)
searchQuery[searchQuery.Length -1] = "";
没有一个有效。我知道字符串在 C# 中是不可变的,但是,这是可能的还是有更好的方法来实现这一点?
提前致谢。
【问题讨论】:
-
searchQuery = searchQuery.SubString(0, searchQuery.Length - 1); -
使用 StringBuilder()
-
@LegacyCode 谢谢!如果您为此放弃答案,我一定会标记它。这行得通。
-
@rene 真的是 StringBuilder 吗?
-
@LegacyCode 是的,你有这个问题吗?
标签: c# string console immutability