I have a Dictionary<string, List<string>>
and would like to expose the member as read only. I see that I can return it as a IReadOnlyDictionary<string, List<string>>
, but I can't figure out how to return it as an IReadOnlyDictionary<string, IReadOnlyList<string>>
.
Is there a way to do this? In c++ I'd just be using const, but C# doesn't have that.
Note that simply using a IReadOnlyDictionary
does not help in this case, because I want the values to be read only as well. It appears the only way to do this is build another IReadOnlyDictionary, and add IReadOnlyList to them.
Another option, which I wouldn't be thrilled with, would be to create wrapper which implements the interface IReadOnlyDictionary>, and have it hold a copy of the original instance, but that seems overkill.
It would be as easy as casting the whole dictionary reference to IReadOnlyDictionary<string, IReadOnlyList<string>>
because Dictionary<TKey, TValue>
implements IReadOnlyDictionary<TKey, TValue>
.
BTW, you can't do that because you want the List<string>
values as IReadOnlyList<string>
.
So you need something like this:
var readOnlyDict = (IReadOnlyDictionary<string, IReadOnlyList<string>>)dict .ToDictionary(pair => pair.Key, pair => pair.Value.AsReadOnly());
This is just a suggestion, but if you're looking for immutable dictionaries, add System.Collections.Immutable
NuGet package to your solution and you'll be able to use them:
// ImmutableDictionary<string, ImmutableList<string>> var immutableDict = dict .ToImmutableDictionary(pair => pair.Key, pair => pair.Value.ToImmutableList());
Learn more about Immutable Collections here.
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