gpt4 book ai didi

.net - ICollection.IsReadOnly 的契约(Contract)

转载 作者:行者123 更新时间:2023-12-04 08:30:44 24 4
gpt4 key购买 nike

我正在编写一个实现 IList<T> 的数组包装类。 .我不确定返回什么 IList<T>.IsReadOnly (继承自 ICollection<T> )。

我的类(class)不允许插入和删除。它确实允许通过 this[int].set 修改项目属性(property)。

MSDN指出

A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created.



对于我的类(class),这似乎意味着我必须返回 true但在我看来,这使得该属性有点完全没用:据我所知,这种方法的使用如下:

客户端处理任意 IList如果可能的话,需要在其中插入一个元素。他们可以通过调用 Insert 来做到这一点。并捕获结果 NotSupportedException – 由于各种原因,这可能是不可取的。因此,客户端无需引发异常,只需测试 IsReadOnly事先属性(property)。

但是这个属性的结果将是 错了因为它将集合的可修改性与其内容的可修改性混合在一起,即 完全不相关的事情 !

可以肯定的是,有 IList.IsFixedSize属性,但这是一个单独的类型( IList<T> 不扩展 IList )。我该怎么办?同时执行 IList (我真的不喜欢这种选择)?做点别的吗?

最佳答案

还有什么要考虑的...

您的集合是一个数组包装器,它具有一些类似数组的语义。即,项目不能插入或删除,但可以修改。

数组返回 false对于 IsReadOnlytrue对于 IsFixedSize .

我想我可能会实现 IList除了IList<T>然后模仿数组的行为,直到 IsReadOnlyIsFixedSize担心。

remark from MSDN中的关键字是“或”:

A collection that is read-only does not allow the addition, removal, or modification of elements after the collection is created.



您的收藏确实允许修改,因此返回 true对于 IsReadOnly在我看来,这将违反该契约(Contract)。

关于.net - ICollection<T>.IsReadOnly 的契约(Contract),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1073522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com