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.
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.
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.
How about the ReadOnlyCollection already within the framework?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With