2011-03-17 57 views
2

我可以假设元素从IList<T>顺序保持平等的,当我使用它作为一个BindingSource(Windows窗体)的DataSource,使BindingSource.PositionList.IndexOf()是等价的同一个对象?的BindingList用的IList <T>数据源,元订购

这对我很重要,因为Find不支持那些不BindingList名单,所以我用的是普通的老IList.IndexOf方法来确定元素的位置:

myBindingSource.Position = myItemList.IndexOf(myItem); 

显然,这工作正常。但我不知道我是否还不知道我是否真的可以依靠这个工作。我有点担心,因为BindingListList财产将数据复制到新表结构(见DataSource备注)...

欢呼声中,马蒂亚斯

回答

1

是,IList<T>应保持相同的顺序在一直。这是超出IEnumerable<T>(在附加功能方面)的一个步骤,它不保证排序,只是枚举集合的能力。 IList<T>增加索引以支持更多的功能,例如需要建立索引的.IndexOf().RemoveAt()

现在,无论您填充IList<T>的数据源是否以相同的顺序返回项目,这是另一回事。

+0

谢谢大卫。我从“IList ”填充数据源(反之亦然)。不知道我是否准确地描述了这一点,或误解了你。我很抱歉。无论如何,所以你认为我不应该依赖索引和位置等同? – 2011-03-18 12:29:17

+1

@Mudu:也许我不确定你在寻找索引的不可变性。但基本上,一旦IList (假设实现本身没有被破坏)的给定实现被实例化,其中的任何给定元素在该对象的整个生命周期中将具有相同的索引。 (当然,除非你添加/删除元素。) – David 2011-03-18 12:32:21

+0

Ouch,在我原来的问题中致命的错字:'BindingSource',而不是'BindingList'(上面已经纠正)。我不确定'DataSource'属性是否混淆了元素顺序,因为数据(我想)是从列表中复制到'IBindingList'中的,然后再暴露给绑定控件。但是,这些都是列表,所以我现在有信心他们会保持订单,就像你上面写的一样。 :) – 2011-03-18 12:40:54