ReadLineメソッドではCR/LF/CRLFのいずれかを改行として扱います。 リダイレクトパイプで接続された標準入力から読み込める文字列がなくなった場合や、コンソールアプリケーションにおいてCTRL+Z(LinuxではCTRL+D)によって入力を中断した場合、ReadLineメソッドはnull/Nothingを返します。

Console.ReadLineメソッドで標準入力から読み込める内容がなくなるまで読み込み、読み込んだ内容に行番号を付けて標準出力に書き込む
using System;

class Sample {
  static void Main()
  {
    var lineNumber = 0;

    while (true) { // 無限ループ
      // 標準入力から一行読み込む
      var line = Console.ReadLine();

      if (line == null) {
        // 読み込める文字列が無くなった
        break;
      }
      else {
        // 読み込んだ文字列に行番号を付けて標準出力に書き込む
        lineNumber++;
        Console.WriteLine("{0}: {1}", lineNumber, line);
      }
    }
  }
}
キー入力を使った場合の実行例
>sample.exe
line1
1: line1
line2
2: line2
line3
3: line3
^Z
パイプを使った場合の実行例
>type sample.txt
line1
line2
line3

>type sample.txt | sample.exe
1: line1
2: line2
3: line3

コンソールアプリケーションではCTRL+Cを押下することでアプリケーションが中断します。 CTRL+Cが押下されたときの動作を変更したい場合は、Console.CancelKeyPressイベントにイベントハンドラを設定することで動作を定義することができます。

コマンドラインでのリダイレクト・パイプと標準入出力との接続についてはMS-DOSコマンドプロンプトTips §.パイプとリダイレクトを参照してください。