Консоль С# - скрыть ввод из окна консоли во время ввода

Я использую Console.ReadLine для чтения ввода пользователя. Тем не менее, я хочу скрыть/исключить введенный текст на экране консоли во время ввода. Например, когда пользователь пишет "a", он записывает "a" в консоль, а затем у меня будет переменная со значением "a". Однако я не хочу, чтобы на выходе консоли было написано "a".

Как я могу это сделать?

Ответ 1

Вот краткая реализация. спасибо @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;
}

Ответ 2

Console.ReadKey(true) скрывает ключ пользователя. Я не верю, что Console.Read() предлагает такую ​​возможность. При необходимости вы можете сидеть в циклах чтения ключей по одному, пока не будет нажата клавиша ввода. См. эту ссылку для примера.

Ответ 3

Я создал этот метод из кода в ответе dataCore и предложения m4tt1mus. Я также добавил поддержку клавиши backspace.

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

Ответ 4

Я просто изменил цвет переднего плана на черный, пока вводился пароль. Я новичок, так что это, вероятно, плохая идея, но это сработало для вызова, который я пытался

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 get you logged in:");