如果标准输入存在,我如何捕获它而不等待它?

How do I capture standard input if it exists, without waiting for it?

我有一个 C# 命令行应用程序。我需要捕获标准输入 如果提供 。如果没有,执行就应该开始了。

我试过各种组合:

Console.OpenStandardInput()
Console.ReadLine()
Console.In.Peek()

全部阻塞,等待输入。这不是我想要的。标准输入应该是可选的。如果未提供,程序应该在没有它且不等待它的情况下启动。

我想我找到了。这显然是 .NET 4.5 中的新功能

if (Console.IsInputRedirected)
{
    using (var reader = new StreamReader(Console.OpenStandardInput(), Console.InputEncoding))
    {
       _stdin = reader.ReadToEnd();
    }
}