Почему не получается передать в обобщенный метод коллекцию типов, реализующих интерфейс, без установки ограничений на <T>

132
03 января 2022, 07:20

Опыт программирования небольшой, помогите, пожалуйста, разобраться. Имеется интерфейс IPinHelper с методом PinFavoriteItem:

 public interface IPinHelper
{
    /// <summary>
    /// Ставит\снимает флаг "Избранный" элементу, сохраняет в настройки и перемещает вверх в коллекции
    /// </summary>
    /// <typeparam name="T">Тип элемента, который нужно припинить\отпинить, должен реализовать интерфейс IPinnable</typeparam>
    /// <typeparam name="TSettings">Тип настроек, с которыми нужно взаимодействовать, должен реализовать интерфейс IPinnedItems</typeparam>
    /// <param name="pinned_item">Элемент, который нужно припинить\отпинить</param>
    /// <param name="pinnable_items">Коллекция элементов, в которой нужно найти pinned_item элемент и поставить\снять флаг "Избранный"</param>
    void PinFavoriteItem<T, TSettings>(IPinnable pinned_item, IList<T> pinnable_items)
        where T : IPinnable
        where TSettings : class, IPinnedItems, new();

Вызов метода выглядит так:

 SetChanelFavoriteCommand = new SyncCommand<ChannelItemViewModel>(
            execute: chanel =>
            {
                UtilFactory.Instance.PinHelper.PinFavoriteItem<ChannelItemViewModel, ChannelsSettings>(chanel, Channels);
            });

ChannelItemViewModel - реализует интерфейс IPinnable

ChannelItemViewModel : BindableBase, IPinnable

а Channels - это:

ObservableCollection<ChannelItemViewModel> Channels

Не могу понять, почему не получается в параметрах установить коллекцию IList<IPinnable> pinnable_items и убрать ограничение where T : IPinnable

void PinFavoriteItem<TSettings>(IPinnable pinned_item, IList<IPinnable> pinnable_items)            
        where TSettings : class, IPinnedItems, new();

Если я убираю ограничение и принимаю в параметр PinFavoriteItem(IList <IPinnable> ) тогда не получается отправить коллекцию Channels ObservableCollection<ChannelItemViewModel> Channels

Пробовал принимать в параметр вместо IList<IPinnable> ObservableCollection<IPinnable> - все равно выдает ошибку приведения

READ ALSO
Как переместить файл?

Как переместить файл?

У меня есть два метода: поиск и сортировка

411
C# Выделение ячеек в Excel Unable to get the Select property of the Range class

C# Выделение ячеек в Excel Unable to get the Select property of the Range class

Стала падать программаВ ней реализовано так: ((Range)worksheet

185
копирование файлов с прогрессом

копирование файлов с прогрессом

У меня небольшая программка, которая копирует файлы с папками с одного места в указанноеХотелось бы прикрутить ProgressBar для отображения копирования,...

101
Поиск файлов по расширению c#

Поиск файлов по расширению c#

такая проблема: Есть код, который получает все файлы с данным расширением

119