-1

Изучаю только. До этого пользовался int x = x.Parse(Console. Readline()). Тут все понятно было. Строка считывается с консоли, конвертируется в int и присваивается.

ConsoleKey keywoard = Console.Readkey().Key;

ConsoleKey - получается тип данных enum, это константы там хранятся значения клавиатуры. Для доступа к ним создаётся keywoard(любое название)Пытаюсь разобратся(

Console.Readkey().Key - получается значение считывается с консоли, а что .Key делает после скобок?

Простите возможно за бред, сам запутался. Можете объяснить каждую ключевое слово и как вообще это строка работает. Благодарю

  • 1
    Вот, поиграйтесь с примером https://ru.stackoverflow.com/a/1240063/373567, Console.ReadKey возвращает структуру ConsoleKeyInfo, которая содержит не только символ, но и другую полезную информацию. А Key это её поле. Вы же не только печатаемые символы можете на клаве нажимать, но и модификаторы, Alt например. – aepot Oct 08 '23 at 18:59
  • Т.е после ввода символа в ReadKey(), ReadKey возвращает всю информацию об этом символе(номер символа, нажатую клавишу, значение и тд) и всю эту информацию передаёт в Key. А Key в свою очередь передаёт эту информацию в переменную типа ConsoleKeyInfo. А дальше создаём переменную consolekey keywoard = info. Key. Т. Е мы из ConsoleKeyInfo извлекаем уже значение, что мы ввели? – gachi_muchenik Oct 08 '23 at 19:15
  • 1
    Метод возвращает структуру данных ConsoleKeyInfo, а Key лежит внутри неё, откройте документацию. https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/object-oriented/ – aepot Oct 08 '23 at 19:25

2 Answers2

2

Ок, давайте по-порядку:

ConsoleKey keywoard = Console.Readkey().Key;

это объявление переменной с присваиванием:

  • ConsoleKey - это тип переменной, в данном случае enum, который содержит кнопку на которую вы нажали.
  • keywoard - название переменной.
  • Console - это класс, который позволяет работать с консолью (ввод-вывод, цвет и т.д.). Если вы не знаете ещё не знаете что такое класс, то пока что можете представить это как некоторый набор переменных и функций объединенные вместе по смыслу.
  • ReadKey() - это вызов статического метода, который возвращает структуру ConsoleKeyInfo. Если вы не знаете ещё не знаете что такое метод, то пока что можете представить это как обычную функцию.
  • .Key - это свойство, которое назодится в ConsoleKeyInfo (получили на предыдущем шаге), вот оно и является ConsoleKey. Если вы не знаете ещё не знаете что такое, то пока что можете представить это как переменную, которая хранится в другом классе.

Ваше выращение можно переписать так, возможно понятнее будет:

ConsoleKeyInfo info = Console.Readkey();
ConsoleKey keywoard = info.Key;

Просто C# позволяет сразу обращаться к свойству Key без сохранения его в промежуточную переменную.

  • Получается ConsoleKey содержит в себе список значений клавиш клавиатуры правильно? А переменная типа ConsoleKey принимает значения, которые допустимы из списка enum(т.е клавиши) чтобы с ними взаимодействовать. (как допустим тип int принимает целочисл значения, а о его, а key преобразует это введенное значение в код клавиши. Далее код этой клавиши присваивается переменной enum. Поправте меня если не так понял – gachi_muchenik Oct 08 '23 at 17:38
  • @gachi_muchenik Получается ConsoleKey содержит в себе список значений клавиш клавиатуры правильно? да, список всех допустимых значение можно найти в документации https://learn.microsoft.com/en-us/dotnet/api/system.consolekey?view=net-7.0 – Exploding Kitten Oct 08 '23 at 17:51
  • @gachi_muchenik а key преобразует нет, Key и есть это значение/код, и вы его просто сохраняете в переменную keywoard. ReadKey() возвращает информацию о нажатой клавише на клавиатуре - Key, о символе который представляет эта клавиша - KeyChar, и дополнитильные модификаторы - Modifiers (shift ...) – Exploding Kitten Oct 08 '23 at 17:54
  • ConsoleKey keywoard=Console.ReadKey().Key

    Т. Е ReadKey() принимает введенное нами значение, и возвращает его уже в виде структуры ConsoleKeyInfo(т.е возвращает все данные об этом значении)Далее мы присваивает значение key(ConsoleKey) (т.е введеного нами символа) переменной keywoard. А чтобы получить доступ к веденному нами значению мы обращаемся keywoard.Key.

    – gachi_muchenik Oct 08 '23 at 20:17
1

Метод Console.ReadKey() считывает следующий символ ввода консоли и возвращает объект, представляющий нажатую клавишу. Свойство Key этого объекта содержит код клавиши. Пример

Console.WriteLine("Нажмите Y или N чтобы получить результат");
switch (Console.ReadKey().Key)
{
    case ConsoleKey.Y:
        Console.WriteLine();
        Console.WriteLine("Вы нажали Y");
        break;
    case ConsoleKey.N:
        Console.WriteLine();
        Console.WriteLine("Вы нажали N");
        break;
}
Console.ReadKey();

введите сюда описание изображения

То есть мы можем дать выбор нажать Y и выполнить функцию или нажать N и не выполнить функцию. Или же вывести в консоль чтобы пользователь указал цифру какую то, например 5 и считать эту цифру и использовать в приложение для вашей реализации

xellan
  • 560
  • 3
  • 11
  • А ConsoleKey keywoard получается просто получает значение из.Key?т.е возвращает код клавиши и присваивает keywoard? – gachi_muchenik Oct 08 '23 at 16:30
  • @gachi_muchenik ConsoleKey keywoard = Console.Readkey().Key; здесь keywoard просто получает код клавиши нажатой. Результат нажатой клавиши хранится в переменной keywoard, вы можете обработать это нажатии потом в if или switch или использовать Key как в примере с ответа. – xellan Oct 08 '23 at 16:33
  • 1
    ConsoleKey keywoard=Console.ReadKey().Key

    Т. Е ReadKey() принимает введенное нами значение, и возвращает его уже в виде структуры ConsoleKeyInfo(т.е возвращает все данные об этом значении)Далее мы присваивает значение key(ConsoleKey) (т.е введеного нами символа) переменной keywoard. А чтобы получить доступ к веденному нами значению мы обращаемся keywoard.Key.

    – gachi_muchenik Oct 08 '23 at 20:29