EADever Ответов: 1

Как я могу вызвать класс, который расширяет интерфейс?


У меня есть класс интерфейса:

public interface IStatFunction : IComparable<IStatFunction>
    {
        
    }


а нормальный класс расширяет интерфейс IStatFunction:
public class StatFunction : IStatFunction
    {
        
    }


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

public void addEffect(IStatOwner statOwner, List<IStatFunction> functions)
        {
            
        }


другой код вызывает эту функцию addEffect:
List<StatFunction> allModifiers = null;
            cgs.addEffect(item, allModifiers);


Теперь я получаю ошибку: не удается преобразовать List & lt;statfunction> В List & lt;istatfunction>

так как же я могу исправить эту ошибку?

Что я уже пробовал:

Я пытаюсь использовать ConvertAll, его можно удалить ошибку, но я не знаю, работает он или нет:
cgs.addEffect(item, allModifiers.ConvertAll(o => (IStatFunction)o));

1 Ответов

Рейтинг:
7

OriginalGriff

Это сложно объяснить почему - Ковариация и контравариантность (информатика) - Википедия[^] помогает объяснить это - но это просто исправить:

public void addEffect<T>(IStatOwner statOwner, List<T> functions) where T : IStatFunction
    {
    ...    
    }