Универсальный метод с универсальным интерфейсом

У меня есть этот метод

public static void ReadExcelToKeyableList<T, TKey>() where T : IKeyable<TKey>, IExcel
{
    List<T> keyableList = GetList(typeof(T));
    T getKeyable;

Часть кода в методе такова:

        foreach (IExcel xl in toList)
            if (xl is T)
            {
                (keyableList[keyableList.IndexOf(getKeyable)] = (xl as T)).Update();
            }

И я получаю следующую ошибку

Параметр типа "T" нельзя использовать с оператором "as", поскольку он не имеет ограничения типа класса или ограничения "class"


Я пытался изменить код на этот:

(keyableList[keyableList.IndexOf(getKeyable)] = (xl as IKeyable<TKey>)).Update();

И теперь я получаю эту ошибку:

Невозможно неявно преобразовать тип "DataService.Classes.IKeyable" в "T". Существует явное преобразование (вам не хватает приведения?)


Почему я не могу конвертировать IKeyable в T, даже если я установил where T : IKeyable<TKey>?

Кто-нибудь есть идеи, как я могу решить это?

0 ответов

Другие вопросы по тегам