.NET Framework 4.5以降では、IsInputRedirected/IsOutputRedirected/IsErrorRedirectedの各プロパティを参照することにより、自プロセスの標準ストリームがリダイレクトされているかどうかを知ることができるようになっています。

これらのプロパティは、コマンドラインで標準ストリームのパイプ・リダイレクトを行った場合にtrueとなるほか、SetIn/SetOut/SetErrorメソッドによってリダイレクトを行った場合もtrueとなります。

標準ストリームがリダイレクトされているかどうかを調べる
using System;

class Sample {
  static void Main()
  {
    // 各標準ストリームがリダイレクトされているかどうかを調べる
    Console.WriteLine("IsInputRedirected:  {0}", Console.IsInputRedirected);
    Console.WriteLine("IsOutputRedirected: {0}", Console.IsOutputRedirected);
    Console.WriteLine("IsErrorRedirected:  {0}", Console.IsErrorRedirected);
  }
}
実行結果
>sample.exe
IsInputRedirected:  False
IsOutputRedirected: False
IsErrorRedirected:  False

>type sample.txt | sample.exe
IsInputRedirected:  True
IsOutputRedirected: False
IsErrorRedirected:  False

>sample.exe | more
IsInputRedirected:  False
IsOutputRedirected: True
IsErrorRedirected:  False

>sample.exe < sample.txt
IsInputRedirected:  True
IsOutputRedirected: False
IsErrorRedirected:  False

>sample.exe > stdout.txt

>type stdout.txt
IsInputRedirected:  False
IsOutputRedirected: True
IsErrorRedirected:  False

>test.exe 2> stderr.txt
IsInputRedirected:  False
IsOutputRedirected: False
IsErrorRedirected:  True

これらのプロパティをチェックすることで標準出力の出力先がコンソールウィンドウかどうかを知ることができるため、リダイレクトされているときはConsole.ForegroundColor/BackgroundColorプロパティで文字色を変えたり、Console.CursorLeft/CursorTopプロパティでカーソルの位置を変えたりしないようにする、といったことができます。

.NET Framework 4.5より前のバージョンではこれらのプロパティは用意されないため、c# - How to detect if Console.In (stdin) has been redirected? - Stack Overflowで提示されているような方法を使って調べる必要があります。