【问题标题】:Why is the `IDictionary.Values` property of type `ICollection`?为什么是 `ICollection` 类型的`IDictionary.Values` 属性?
【发布时间】:2012-10-21 09:20:32
【问题描述】:

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

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

【问题讨论】:

标签: c# dictionary ienumerable icollection


【解决方案1】:

这允许您在字典接口上使用Count 属性和Contains() 方法。

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

【讨论】:

  • +1:此外,您不希望在值集合上允许 AddRemove 方法,因为 Key 将为空。
  • 为什么值集合要有Contains方法? Count 是唯一对我有意义的。
  • +1:应该是IReadOnlyCollection,但当时不存在,现在卡住了。
  • 只是为了好玩,你能想出一个字典实现,它可以从字典本身独立添加/删除键/值中受益,就像当前接口在技术上支持的那样?
  • 好吧,ICollection<T> 有一个属性 IsReadOnly
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2012-02-28
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多