Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read-only list or unmodifiable list in .NET 4.0

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 for domain-driven design?

One of the few advantages Java has over C# is this in the form of the Collections.unmodifiablelist(list) method, which it seems is long overdue in IList<T> or List<T>.

Using IEnumerable<T> is the easiest solution to the question - ToList can be used and returns a copy.

like image 576
Chris S Avatar asked Jun 11 '09 22:06

Chris S


3 Answers

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.

like image 169
LukeH Avatar answered Oct 08 '22 13:10

LukeH


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.

like image 28
Martin Avatar answered Oct 08 '22 14:10

Martin


How about the ReadOnlyCollection already within the framework?

like image 13
Jason Watts Avatar answered Oct 08 '22 12:10

Jason Watts