C#控制台 – 在键入时隐藏控制台窗口的输入

我正在使用Console.ReadLine来读取用户的输入。 但是,我想在键入时隐藏/排除控制台屏幕上输入的文本。 例如,当用户写“a”时,它将“a”写入控制台,然后我将得到一个值为“a”的变量。 但是,我不希望在控制台的输出上写入“a”。

我怎样才能做到这一点?

这是一个简短的实现。 这个想法是@ojblass

 System.Console.Write("password: "); string password = null; while (true) { var key = System.Console.ReadKey(true); if (key.Key == ConsoleKey.Enter) break; password += key.KeyChar; } 

Console.ReadKey(true)隐藏用户密钥。 我不相信Console.Read()提供这样的function。 如果需要,您可以坐在一个循环中,一次读取一个键,直到按下Enter键。 请参阅此链接以获取示例。

我是通过dataCore的回答中的代码和m4tt1mus的建议创建了这个方法。 我还添加了对退格键的支持。

 private static string GetHiddenConsoleInput() { StringBuilder input = new StringBuilder(); while (true) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.Enter) break; if (key.Key == ConsoleKey.Backspace && input.Length > 0) input.Remove(input.Length - 1, 1); else if (key.Key != ConsoleKey.Backspace) input.Append(key.KeyChar); } return input.ToString(); } 

我只是在输入密码时将前景色改为黑色。 我是一个新手,所以这可能是一个坏主意,但它适用于我正在尝试的挑战

 Console.WriteLine("Welcome to our system. Please create a UserName"); var userName = Console.ReadLine(); Console.WriteLine("Now please create a password"); Console.ForegroundColor = ConsoleColor.Black; var password = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Okay, let's get you logged in:");