Streamクラスにはヌルオブジェクトを取得するプロパティStream.Nullが用意されています。 Stream.Nullは、NULLデバイス(nul・/dev/null)の代わりとして使ったり、テスト時に具体的なStreamを用意する代わりにモックとして使用したりすることができます。

Stream.Nullは読み込み・書き込み・シークなど全ての機能をサポートしますが、実際にそれらの操作を行なっても何も起こりません。 Stream.Nullに対してWriteメソッドで書き込んだ内容はすべて破棄され、ReadメソッドでStream.Nullから読み込みを行った場合は0バイトのデータが読み出されます。 Stream.Nullの長さ(Length)は常に0です。

次の例では、出力先をStream.Nullに設定したStreamWriterをConsole.SetOutメソッド渡すことによって標準出力の出力先をコンソールからStream.Nullに変更(リダイレクト)し、Console.WriteLineメソッドで出力される内容を破棄しています。

Stream.Nullを使ってConsole.WriteLineメソッドで出力される内容を破棄する
using System;
using System.IO;

class Sample {
  static void Main(string[] args)
  {
    foreach (var arg in args) {
      // オプションスイッチ/quietが指定された場合は、標準出力へのメッセージ出力を抑止する
      if (arg == "/quiet") {
        // 標準出力の出力先をStream.Nullに設定したStreamWriterに変更する
        Console.SetOut(new StreamWriter(Stream.Null));
        // 次のようにTextWriter.Nullを使うことも可能
        // Console.SetOut(TextWriter.Null);
      }
    }

    // 警告メッセージを標準出力に出力
    Console.WriteLine("warning");

    // 致命的なエラーメッセージを標準エラーに出力
    Console.Error.WriteLine("FATAL ERROR");
  }
}
実行結果
D:\test> Sample.exe
warning
FATAL ERROR

D:\test> Sample.exe /quiet
FATAL ERROR

標準出力のリダイレクトについては自プロセスの標準入出力 §.標準ストリームのリダイレクトで詳しく解説しています。