为什么类型为`ICollection`的`IDictionary.Values`属性?

Ant*_*ony 2 c# ienumerable dictionary icollection

我试图绕过为什么IDictioary<TKey, TValue>.Values属性是类型ICollection<TValue>而不是IEnumerable<TValue>.该Values属性的.NET实现显式实现了接口属性,然后将该Values属性公开为类型Dictionary<TKey, TValue>.ValueCollection,当您尝试从中添加或删除值时会抛出异常.

这似乎是一个完整的黑客.由于字典的性质,创建一个允许您获取字典中的值集合并从中添加/删除值的实现是否有意义?

SLa*_*aks 6

这允许您在字典界面上使用Count属性和Contains()方法.

你是对的; 这是一个丑陋的黑客.
理想的解决方案是使用新的(.Net 4.5)IReadOnlyCollection<T>界面.