Как мне конвертировать общий IList <T>в IList? - PullRequest
5 голосов
/ 14 апреля 2019

Я хочу создать ListCollectionView с общим IList<T>, но конструктор получает неуниверсальный IList.Как я могу преобразовать мой список из IList<T> в IList?

, если есть другой способ создать ListCollectionView с общим IList<T>, который я хотел бы услышать:)

Ответы [ 2 ]

6 голосов
/ 14 апреля 2019

Досадно, IList<T> - это один из тех интерфейсов, который не реализует его неуниверсальный аналог IList.

Если вы можете найти способ передать List<T> вместо IList<T> (или другой тип, который реализует IList, а также IList<T>, такой как ObservableCollection<T>), это будет проще всего.Это может означать изменение вашего приложения так, чтобы вы передавали List<T> или что-то еще, а не IList<T>.

В противном случае вам, возможно, придется создать новый List<T>, используя элементы IList<T> и передать это (то есть myList.ToList()).Обратите внимание, что это означает, что вы создали копию своего списка, и поэтому изменения в оригинале не будут отражены в копии.В частности, ListCollectionView проверяет, реализует ли исходная коллекция INotifyCollectionChanged, и подписывается на измененные события коллекции, если это так: это, очевидно, не будет работать, если вы создадите копию своего списка.

4 голосов
/ 14 апреля 2019

List<T> реализует IList (IList<T> нет).Создайте List<T> из вашего IList<T> и передайте его конструктору ListCollectionView:

ListCollectionView lcv = new ListCollectionView(new List<YourType>(yourIList));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...