`Dictionary <TKey,TValue> .KeyCollection`是否实现`IReadOnlyCollection`?

luk*_*k32 7 .net c# dictionary

问题似乎很简单.虽然文档说它确实:

public sealed class KeyCollection : ICollection<TKey>, 
    IReadOnlyCollection<TKey>, IEnumerable<TKey>, ICollection, IEnumerable
Run Code Online (Sandbox Code Playgroud)

以下代码给出了错误:

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

说没有转换KeyCollection<T>IReadOnlyCollection<T>.

此外,波兰语文档(法语也就此而言)说它没有:

[SerializableAttribute]
public sealed class KeyCollection : ICollection<TKey>, 
    IEnumerable<TKey>, ICollection, IEnumerable
Run Code Online (Sandbox Code Playgroud)

这是什么?

如果是英文文档中的错误,还有一个奖励问题:

有没有办法获得Keys只读集合?

Joh*_*ner 5

在撰写此答案时,参考源不包含IReadOnlyCollection interfact实现:

public sealed class KeyCollection: ICollection<TKey>, ICollection
Run Code Online (Sandbox Code Playgroud)

从那时起,参考源已经更新,现在包括IReadOnlyCollection接口.

public sealed class KeyCollection: ICollection<TKey>, ICollection, IReadOnlyCollection<TKey>
Run Code Online (Sandbox Code Playgroud)


i3a*_*non 5

Dictionary.KeyCollection目前没有实施IReadOnlyCollection.

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

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