You can expose a List<T> as a ReadOnlyCollection<T> by using the AsReadOnly() method
C# 6.0 and later (using Expression Bodied Properties)
class Foo {
private List<int> myList;
public ReadOnlyCollection<int> ReadOnlyList => myList.AsReadOnly();
}
C# 5.0 and earlier
class Foo {
private List<int> myList;
public ReadOnlyCollection<int> ReadOnlyList {
get {
return myList.AsReadOnly();
}
}
}