And while IList isn't covariant, a read-only list interface would be.
即使IList接口不是协变的,一个只读列表接口也理应如此。
It is a bit odd, since List for any type other than object does not fulfill the full contract of IList.
这个有点奇怪,因为除了T为object时之外,其他情况下List都不满足的IList的要求。
Using IList to model a set is unfortunate: it creates a semantic problem because lists allow duplicates.
使用IList来对set建模是让人徒呼奈何的一件事情:它会带来语义上的冲突,因为list允许出现重复的元素。
It may sound surprising, or not, but IList and IList are our interfaces intended for read-only collections.
无论这听起来是否令人惊讶,但是IList和IList是我们打算用于只读集合的两个接口。
Perhaps the solution here is to retroactively create base classes for IList that separate the methods that accept a T value from the ones that return one.
或许这里应该针对IList创建一个基类,该类会将接受T与返回T的方法区分开来。
For example, they can help you test your custom Exception class, verify that your datatype's Equals & GetHashCode are consistent, and check IList invariants.
例如,它可以帮你测试自定义的异常类,验证自定义类型的Equals和GetHashCode方法是否一致,以及检查IList的不变性。
One may find it interesting to know that IList does not inherit from IReadOnlyList, even though it has all the same members and all lists can be expressed as a read-only list. Immo Landwerth explains.
尽管IList接口与IReadOnlyList接口具有全部相同的成员、并且所有IList类型的列表都可表示为只读列表,但是IList不是继承自ireadonlylist,当有人得知这些以后可能会觉得很有趣。
One may find it interesting to know that IList does not inherit from IReadOnlyList, even though it has all the same members and all lists can be expressed as a read-only list. Immo Landwerth explains.
尽管IList接口与IReadOnlyList接口具有全部相同的成员、并且所有IList类型的列表都可表示为只读列表,但是IList不是继承自ireadonlylist,当有人得知这些以后可能会觉得很有趣。
应用推荐