bpe*_*kes 11 c# collections covariance
我有一个Dictionary<string, List<string>>并希望将该成员公开为只读.我看到我可以将它作为一个返回IReadOnlyDictionary<string, List<string>>,但我无法弄清楚如何将它作为一个返回IReadOnlyDictionary<string, IReadOnlyList<string>>.
有没有办法做到这一点?在c ++中,我只是使用const,但C#没有.
请注意,IReadOnlyDictionary在这种情况下简单地使用a 没有帮助,因为我希望只读取值.看来唯一的方法是构建另一个IReadOnlyDictionary,并向它们添加IReadOnlyList.
另一个我不会兴奋的选择是创建实现接口IReadOnlyDictionary>的包装器,并让它保存原始实例的副本,但这似乎有点过分.
Mat*_*zer 17
这将是铸造整个辞典参考那样容易IReadOnlyDictionary<string, IReadOnlyList<string>>,因为Dictionary<TKey, TValue>工具IReadOnlyDictionary<TKey, TValue>.
顺便说一句,你不能这样做,因为你想要的List<string>价值为IReadOnlyList<string>.
所以你需要这样的东西:
var readOnlyDict = (IReadOnlyDictionary<string, IReadOnlyList<string>>)dict.ToDictionary(pair => pair.Key, pair => pair.Value.AsReadOnly());
Run Code Online (Sandbox Code Playgroud)
这只是一个建议,但如果您正在寻找不可变的词典,请将System.Collections.ImmutableNuGet包添加到您的解决方案中,您将能够使用它们:
// ImmutableDictionary<string, ImmutableList<string>>
var immutableDict = dict.ToImmutableDictionary(pair => pair.Key, pair => pair.Value.ToImmutableList());
Run Code Online (Sandbox Code Playgroud)
在此处了解有关Immutable Collections的更多信息.