c# - `Dictionary<TKey, TValue>.KeyCollection` 是否实现了 `IReadOnlyCollection`?

标签 c# .net dictionary

这个问题看起来很简单。虽然documentation说是的:

public sealed class KeyCollection : ICollection<TKey>, 
    IReadOnlyCollection<TKey>, IEnumerable<TKey>, ICollection, IEnumerable

以下代码报错:

class MyKeys<T>
{
    readonly Dictionary<T, T> dict = new Dictionary<T, T> ();
    public IReadOnlyCollection<T> Keys { get { return dict.Keys; } set; }
}

表示没有来自 KeyCollection<T> 的转换至 IReadOnlyCollection<T> .

此外polish documentation (就此而言也是法语)说它没有:

[SerializableAttribute]
public sealed class KeyCollection : ICollection<TKey>, 
    IEnumerable<TKey>, ICollection, IEnumerable

这是什么?

如果是英文文档中的错误,一个额外的问题:

有没有办法得到Keys作为只读集合?

最佳答案

Dictionary.KeyCollection 当前未实现 IReadOnlyCollection

但是,该接口(interface)已添加到下一版本的 .Net (v4.6) 中。您可以使用 VS 2015 预览版看到这一点。

您还可以在 this announcement 中看到(下载包含 v4.6 的所有更改的 excel 文件)

关于c# - `Dictionary<TKey, TValue>.KeyCollection` 是否实现了 `IReadOnlyCollection`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28218693/

相关文章:

c# - 如何告诉应用程序在抛出异常后停止处理

c# - 如何 try catch 未找到的程序集

c# - 如何在不指定类型的情况下将泛型类存储在列表中?

javascript - 将键添加到已存在的 javascript 数组中的所有值

c# - 负载测试的意外行为

c# - 在 Windows Server 2012 上将字符串从 C DLL 返回到 C# DLL 时出现 HTTP 状态 502 错误

.net - .NET 中的别名

javascript -\n 和\t 并使用 javascript 或 .net 让它们显示在 &lt;textarea&gt; 中

javascript - 新手问题 : How to get information if google map is loaded (initialized)

python - 从字典中查找后的同名值求和