谁能解释一下这个问题?
Dictionary<string, List<string>> x
= new Dictionary<string, List<string>>();
IReadOnlyDictionary<string, IReadOnlyCollection<string>> y
= new Dictionary<string, IReadOnlyCollection<string>>();
y = x; // CS0266: Cannot implicitly convert type...
你可以这样接近你的目标:
Dictionary<string, List<string>> x = new Dictionary<string, List<string>>()
{
{ "Foo", new List<string> {"A", "B", "C"} }
};
IReadOnlyDictionary<string, ReadOnlyCollection<string>> y =
new ReadOnlyDictionary<string, ReadOnlyCollection<string>>(x.ToDictionary(k => k.Key, v => new ReadOnlyCollection<string>(v.Value)));
IReadOnlyCollection<string> foo = y["Foo"];
注意,ReadOnlyCollection<T>
包装了原始列表。它不复制元素。ReadOnlyDictionary<TKey, TValue>
也一样。
IReadOnlyDictionary
对其值不协变。这是为了在TryGetValue
方法周围提供类型安全。
考虑这个例子:
Dictionary<string, List<string>> x = new Dictionary<string, List<string>>
{
{ "Key", new List<string>() }
};
IReadOnlyDictionary<string, IReadOnlyCollection<string>> y = new Dictionary<string, IReadOnlyCollection<string>>
{
{ "Key", new System.ArraySegment<string>() } //This is allowed because an ArraySegment implements IReadOnlyCollection<string>
};
List<string> foo;
x.TryGetValue("Key", out foo);
foo.Add("Some string");
最后三行适用于x
,因为它的值是List<string>
。如果将y
分配给x
,它将不起作用,因为它的值不是List<string>
,并且您不能在其上调用Add
。这行不通:
y.TryGetValue("Key", out foo); //Error
也不会:
x = y;
x.TryGetValue("Key", out foo); //Error
因为它适用于x
而不适用y
,它们不是类型兼容的,所以不允许强制转换。
这篇文章完美地描述了您在代码中遇到的情况。
点击😀
Dictionary相关内容
最新更新
- 左连接返回的行数少于左表上的select * ?
- "List index out of range" for Django Steam API
- Java正则表达式从Jasper文本字段的HTML标签中删除样式
- 在python中更改列表中的变量(回溯)
- Laravel/PHP:条件日期过滤器
- 多个yaml文件在ros2启动
- 与来自无线电和复选框的JS一起添加两个值以获得总数
- Python -仅显示4位序列的圆锥序列
- 在使用Zeep通过代理访问SOAP时更改服务URL
- 无法导入节点模块
- VueJs 3 - Vuex: Uncaught TypeError: store不是函数
- Textarea视觉元素?
- 日志记录不输出调试和信息日志
- 试图在R上安装地球引擎;Python =3.1不可用
- 如何在我的代码中添加一些项目,例如"Favorite"?
- 获取python中从1开始的值的特定索引
- BeautifulSoup美化编码非英语(西里尔字母)字符奇怪
- 为什么' rev().rev() '工作,但' rev().skip(1).rev() '不工作? &
- 我可以在共享媒体目录DCIM或Android的下载目录下编程创建空子目录吗?
- 错误:太多的重新渲染.React限制了渲染的次数,以防止无限循环.带有嵌套函数的自定义钩子
- (Python 3.8)如何将变量转换为没有分隔符的列表?
- 解决Docker层缓存在Azure Pipeline中不工作的问题
- Jetpack compose:可以设置下拉菜单的高度,以显示下一个项目
- 如何平嵌套的可观察对象,从RXJS
- 为什么我的解决方案不正确的旅游切片练习?
- 我如何使用sbt命令,如清洁和编译在我的自定义sbtplugin
- Angular语言 - 根据给定的数据自动填充嵌套表单
- node-gyp configure将错误:在VisualStudioFinder中生成EPERM
- Spring WebClient检索封装在results属性下的json对象
- 尝试设置BlazorMonaco编辑器时"ReferenceError: monaco is not defined"
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium