因此,ListBox.ObjectCollection
和ListView.ListViewItemCollection
都会实施IList
类,该类提供Add
和Remove
方法,但不提供AddRange
,{{ 1}}或InsertRange
。但是,RemoveRange
和ListBox.ObjectCollection
也提供了ListView.ListViewItemCollection
方法 - 只有AddRange
或InsertRange
。
另一方面,请查看RemoveRange
课程,除了实施ArrayList
之外,还提供IList
,AddRange
和InsertRange
。此类和接口的通用形式RemoveRange
(包含List<T>
,AddRange
和InsertRange
)和RemoveRange
(仅限于此类)提供IList<T>
和Add
)。
我可以理解Remove
和IList
接口没有提供IList<T>
等等 - 它只是一个接口;超出AddRange
,Add
,Remove
等最低要求的任何内容都是可选的。但是,考虑到RemoveAt
和*Range
类的ArrayList
方法的有用性,并考虑到List<T>
和ListBox
控件的方便性,我想知道为什么他们不存在这些控制。
有谁知道吗? ListView
和InsertRange
的内部实施是否存在一些问题,使得这些方法在某种程度上不如RemoveRange
和ListBox.ObjectCollection
更有效,更复杂或更不适合ListView.ListViewItemCollection
和AddRange
。 AddRange
吗
要明确:我不是在寻找“看起来像微软的某个人变得懒惰”的猜测。相反,我想知道是否有人知道<{1}}和InsertRange
/ RemoveRange
之间的合法差异可能解释了{ {1}}和ListBox.ObjectCollection
。
答案 0 :(得分:1)
一般情况下,使用InsertRange和(甚至更多)RemoveRange是一种非常罕见的情况。例如,RemoveRange应该仅在存在与给定范围类似的连续范围的元素时删除给定范围,还是应该逐个删除给定元素?
如果您需要,这些方法通常很容易实现。借助扩展方法,您可以使它们看起来几乎像本机方法。
代码中没有任何迹象表明实现这些方法会很复杂(就像成千上万的其他“有用”方法一样)。实际上,ListView
的{{1}}实现甚至需要一个数组项目已经在幕后。只是标准InsertItems
总是为数组提供1个元素。使用Reflector查看ListViewItemCollection.Insert()
:
ListViewNativeItemCollection.Insert()
我认为实现该功能并不重要......所以他们没有。
正如Eric Lippert likes to say:“因为没有人设计,指定,实施,测试,记录和发送该功能”。