From what I can tell, .NET 4.0 still lacks read-only lists. Why does the framework still lack this functionality? Isn\'t this one of the commonest pieces of functionality fo
How about the ReadOnlyCollection already within the framework?
For those who like to use interfaces:
.NET 4.5 adds the generic IReadOnlyList interface which is implemented by List<T>
for example.
It is similar to IReadOnlyCollection and adds an Item
indexer property.
You're looking for ReadOnlyCollection, which has been around since .NET2.
IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
or
List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();
This creates a read-only view, which reflects changes made to the wrapped collection.
In 2.0 you can call AsReadOnly
to get a read-only version of the list. Or wrap an existing IList
in a ReadOnlyCollection<T>
object.
If the most common pattern of the list is to iterate through all the elements, IEnumerable<T>
or IQueryable<T>
can effectively act as a read-only list as well.
What's wrong with System.Collections.ObjectModel.ReadOnlyCollection?