してはいけないこと(Dictionary内の要素を書き換える)は、できないようにするべき。ということで、
こういうコードをよく書く。
public IReadOnlyDictionary<string, IReadOnlyList<int>> PublicDictionary { get; } private readonly Dictionary<string, List<int>> _privateDictionary = new(); public Hoge() { PublicDictionary = _privateDictionary.ToDictionary(x => x.Key, x => (IReadOnlyList<int>) x.Value); }
もう少しスマートな書き方ないのかな〜と思いながら書いている。
追記(2023/04/23)
この件に関して頂いた勉強になるコメント
ILookupじゃダメですかねー? https://t.co/Uyw7YwQ5v2
— neuecc (@neuecc) 2023年4月22日
IReadOnlyDictionary<TKey, TValue> invariant 案件ですが、Dictionary<string, List<int>> as IReadOnlyDictionary<string, IReadOnlyList<int>> したければ、やはりラップするくらいなのかなぁ。https://t.co/RoLw7ydcNy https://t.co/Dug4AMamOj pic.twitter.com/IGbrWxlYaU
— あすみち (@asmichi98) 2023年4月22日