我刚刚发现.NET Fx现在有3个有用的接口:
但我有点困惑为什么
更新:
经过两个小时的谷歌,我发现BCL中有许多集合具有
更新2:
我找到了这篇文章http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859和Immo Landwerth的回答,他说:
HashSet<T>
没有实现IReadOnlyCollection<T>
?是否有任何原因,或者微软只是再次忘记了集合?更新:
经过两个小时的谷歌,我发现BCL中有许多集合具有
.Count
属性,但不实现IReadOnlyCollection<T>
接口。更新2:
我找到了这篇文章http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b4fb991a-3f5c-4923-93d4-7cd5c004f859和Immo Landwerth的回答,他说:
IReadOnlyCollection<>
的意图。大多数可变集合都实现了这个接口。它的酷之处在于它是协变的。因此,如果您知道您将只从一个集合中读取数据,该集合将被传递到一个方法中,您可以使该方法接受一个IReadOnlyCollection<Animal>
。如果某人有一个List<Giraffe>
,他们可以因为协变而将其用作您方法的输入。这真是太棒了! - Jeppe Stig NielsenIReadableCollection
会很酷。以一种与其使用方式完全不合逻辑的方式命名某物是不酷的。 - jpmc26List<>
实例并在其上使用.AsReadOnly()
,你会得到一个_包装器_,它不会让你修改列表(其他人可以修改它,所以它并不是真正的不可变)。那个包装类被称为ReadOnlyCollection<>
。所以“只读”在这里用了另一种意义。我有点喜欢你的IReadableCollection<>
的想法。然而,现在更改这些令人困惑的名称为时已晚。 - Jeppe Stig Nielsen