AsReadOnlyメソッドを使うと、Listと同じ内容をもった読み取り専用コレクション(ReadOnlyCollection)を取得することが出来ます。 このメソッドを使って作成した読み取り専用のコレクションに対しては、要素の追加・削除・変更などの操作を行うことが出来ません(行おうとするとNotSupportedExceptionがスローされます)。

なお、AsReadOnlyメソッドは元のListを読み取り専用にするものではないので注意してください。 このメソッドは単に、元のListを参照する読み取り専用のコレクション、Listに対する読み取り専用のビューを作成します。 元になったListに対しては、依然として要素の追加・削除・変更が可能です。

AsReadOnlyメソッドを使ってListを読み取り専用にしたコレクションを取得する
using System;
using System.Collections.Generic;

class Sample {
  static void Main()
  {
    var list = new List<string>() {"Alice", "Bob", "Charlie", "Dave", "Eve"};

    // 読み取り専用にしたものをIListとして格納する
    IList<string> readOnlyList = list.AsReadOnly();

    // IList.Addメソッドを使って要素の追加を試みる
    // (読み取り専用のため例外NotSupportedExceptionがスローされる)
    readOnlyList.Add("Frank");
  }
}
実行結果
ハンドルされていない例外: System.NotSupportedException: コレクションは読み取り専用です。
   場所 System.Collections.ObjectModel.ReadOnlyCollection`1.System.Collections.Generic.ICollection<T>.Add(T value)
   場所 Sample.Main()

ReadOnlyCollectionについてより詳しくは汎用ジェネリックコレクション(1) Collection/ReadOnlyCollection §.ReadOnlyCollectionを参照してください。

配列を読み取り専用にする場合についての配列操作 §.読み取り専用化 (AsReadOnly)も合わせて参照してください。