Извините, мне кажется, я неправильно понял, что вы искали. Итак, я думаю, что вы хотите, чтобы иметь возможность использовать ReadKey и Readline вместе? это невозможно, поскольку ReadKey завершается после первого символа, а readLine заканчивается при нажатии Enter. Однако вы можете заставить ReadKey действовать как ReadLine, а затем вы можете проверить, нажата ли клавиша Q для каждого нажатия клавиши. для этого вам нужен буфер, который сохраняет все нажатия клавиш, и каждый раз, когда нажимается «Enter», он очищает буфер на экран.
Edit: Logi c для «Enter» изменен на сброс, если нажата, даже если буфер пуст
Edit2: добавлены комментарии
using System;
class Program
{
public static void Main(string[] args){
var buffer = "";
while(true){
//Only show if buffer is empty
if(buffer.Length == 0){
Console.WriteLine("enter key:");
}
var key = Console.ReadKey(false);
//Only Exit if buffer is empty and Q is pressed (if Q is the first Key pressed)
if(buffer.Length == 0 && key.Key == ConsoleKey.Q){
Console.WriteLine();
Console.WriteLine("the key was 'Q' goodbye");
return;
}
//Every time Enter is pressed, Use and Flush the buffer
else if(key.Key == ConsoleKey.Enter)
{
if(buffer.Length > 0){
Console.WriteLine();
Console.WriteLine("buffer have {0}", buffer);
if(int.TryParse(buffer, out int number)){
Console.WriteLine("{0} is a number!", number);
}
}
buffer = "";
}
//else will capture everything else pressed, and add it to buffer
else{
buffer += key.KeyChar;
}
}
}
}