BindingList с IList‹T› DataSource, порядок элементов

Могу ли я предположить, что порядок элементов из IList<T> остается одинаковым, когда я использую его как DataSource из BindingSource (Windows Forms), чтобы BindingSource.Position и List.IndexOf() были эквивалентны для одного и того же объекта?

Это важно для меня, так как Find не поддерживается в списках, которые не являются BindingList, поэтому я использую старый добрый метод IList.IndexOf для определения позиции элемента:

myBindingSource.Position = myItemList.IndexOf(myItem);

Судя по всему, это работает нормально. Но я не знаю, мог ли я еще не понять, могу ли я на самом деле полагаться на это, чтобы работать. Я немного обеспокоен, потому что свойство List BindingList копирует данные в новые структуры списка (см. DataSource замечания)...

Привет, Матиас


person Matthias Meid    schedule 17.03.2011    source источник


Ответы (1)


Да, IList<T> всегда должен сохранять один и тот же порядок. Это шаг за пределы IEnumerable<T> (с точки зрения дополнительной функциональности), который не гарантирует упорядочение, а только возможность перечисления коллекции. IList<T> добавляет индексацию для поддержки дополнительных функций, таких как .IndexOf() и .RemoveAt(), которые требуют индексации.

Теперь, независимо от того, возвращает ли источник данных, из которого вы заполняете свой IList<T>, элементы в том же порядке, это другая история.

person David    schedule 17.03.2011
comment
Спасибо, Дэвид. Я заполняю DataSource из IList<T> (а не наоборот). Не уверен, что я описал это точно или неправильно вас понял. Извини за это. В любом случае, спасибо, так что вы думаете, что я не должен полагаться на то, что индекс и позиция эквивалентны? - person Matthias Meid; 18.03.2011
comment
@Mudu: Может быть, я не уверен, где вы ищете неизменность индексации. Но в основном, как только конкретная реализация IList<T> (при условии, что сама реализация не сломана) создается, любой данный элемент внутри нее будет иметь один и тот же индекс на протяжении всего жизненного цикла этого объекта. (Если, конечно, вы не добавляете/удаляете элементы.) - person David; 18.03.2011
comment
Ой, фатальная опечатка в моем первоначальном вопросе: BindingSource, а не BindingList (исправлено выше). Я не был уверен, что свойство DataSource испортит порядок элементов, так как данные (я полагаю) копируются из моего списка в IBindingList до того, как они будут представлены связанным элементам управления. Однако это оба списка, так что теперь я уверен, что они сохранят порядок, как вы написали выше. :) - person Matthias Meid; 18.03.2011