Почему вы не можете поместить Console.ReadKey () перед текстом, отображаемым на консоли, или назначить Console.ReadKey () переменной? - PullRequest
0 голосов
/ 18 января 2020
using System;

class MainClass {
  public static void Main (string[] args) {
    Console.WriteLine("Press any key to continue...");
    Console.WriteLine(" key pressed", Console.ReadKey());
  }
}

этот код работает и не имеет ошибок, но

using System;

class MainClass {
  public static void Main (string[] args) {
    Console.WriteLine("Press any key to continue...");
    Console.WriteLine(Console.ReadKey(), " key pressed");
  }
}

не работает и выдает мне ошибка CS1502: наилучший метод перегрузки для System.Console.WriteLine (строка) , object) 'содержит недопустимые аргументы и error CS1503: Arugement' # 1 'не может преобразовать выражение' System.ConsoleKeyInfo 'в тип' string '. Я новичок в c#, поэтому я не знаю много о языке (раньше его использовали только python), но в python я бы написал этот код как

keyPressed = input("Type a key(s) ")
print(keyPressed, "is the key(s) you pressed")

Я также могу просто присвоить ReadKey () переменной

var keyPressed = Console.ReadKey();
Console.WriteLine("the key you pressed was {0}", keyPressed);

Для приведенного выше блока кода я хочу, чтобы любая клавиша, которую нажимает пользователь, сохранялась в переменной keyPressed, но она не работает.

Мой вопрос заключается в том, почему вы не можете поместить Console.ReadKey () перед текстом, который я хочу отобразить на консоли, или назначить Console.ReadKey () для переменной, и как бы вы могли использовать любой ключ пользователя нажатия назначены переменной?

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Вы используете метод Console.WriteLine(), который имеет много перегрузок, таких как:

  • Console.WriteLine(String)
  • Console.WriteLine(Int64)
  • Console.WriteLine(String, Object)

И так далее, и тому подобное. Но есть нет перегрузки:

  • Console.WriteLine(Object, String)

И последний, который вы пытаетесь использовать при выполнении Console.WriteLine(Console.ReadKey(), " key pressed");

Ваши Console.ReadKey() возвращают ConsoleKeyInfo не a String, которые не получены из String или любых других объектов, которые вы можно найти в перегрузках. Так как он не существует, он не может работать, и вы получаете ошибку, которую вы упомянули.

Обычно вы можете использовать автозаполнение, чтобы выяснить, какие перегрузки метода или проверить документацию, которая в большинстве случаев является лучшим способом чтобы найти и понять вещи.

Надеюсь, это поможет.

0 голосов
/ 18 января 2020

Вы можете, но вам нужно использовать его таким образом

Console.Write("Type a key: ");
var k = Console.ReadKey();
Console.WriteLine();
Console.WriteLine($"You have pressed {k.KeyChar}");
...