为什么 ReadKey 在从 Git Bash 运行 .net-core 控制台应用程序时会抛出异常?

7 c# git-bash .net-core

这是代码:

ConsoleKeyInfo cki;

while((cki = Console.ReadKey(true)).Key != ConsoleKey.Escape)
{
    Console.WriteLine(cki.Key);
}
Run Code Online (Sandbox Code Playgroud)

当我使用 dotnet run 从 cmd 或 powershell 运行它时,一切正常。但是,当我从 Git Bash 运行它时,它会抛出以下异常:

未处理的异常。System.InvalidOperationException:当任一应用程序没有控制台或控制台输入已重定向时,无法读取键。尝试控制台.Read。

Mar*_*ell 4

那么,据推测,Git Bash 正在使用 IO 重定向——这是允许的——而其他的……则不允许。那么,解决方案是使用Read而不是ReadKey- 至少在重定向发挥作用的情况下。您可能可以通过-检测Console.IsInputRedirected到这一点,并为可能的情况选择最有用的策略,但是:您将无法以相同的方式检测密钥,因此在这种情况下您可能需要稍微不同的用户体验。