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メソッドで出力される内容を破棄する
Imports System
Imports System.IO

Class Sample
  Shared Sub Main(ByVal args() As String)
    For Each arg As String In args
      ' オプションスイッチ/quietが指定された場合は、標準出力へのメッセージ出力を抑止する
      If arg = "/quiet" Then
        ' 標準出力の出力先をStream.Nullに設定したStreamWriterに変更する
        Console.SetOut(New StreamWriter(Stream.Null))
        ' 次のようにTextWriter.Nullを使うことも可能
        ' Console.SetOut(TextWriter.Null)
      End If
    Next

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

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

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

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