C# · 12月 24, 2021

c# – `Dictionary.KeyCollection`是否实现了`IReadOnlyCollection`?

问题似乎很简单.虽然 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

这是什么?

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

有没有办法让Keys成为只读集合?

解决方法 Dictionary.KeyCollection当前没有实现IReadOnlyCollection.

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

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