Почему я не могу использовать BindingList<TInherited> в качестве параметра для метода, который принимает BindingList<T>?

В основном у меня есть метод со следующей подписью:

public void Save(BindingList<T> items);

и я пытаюсь вызвать это с помощью

classInstance.Save(items); //items = BindingList<ObjectInheritedFromT>

но кажется, что C# не реализует наследование, вызывающее ошибку во время компиляции, где весь код, написанный для T будет полностью функциональным для ObjectInheritedFromT а не так ли?

Есть ли обходной путь для этого? Я понял, что это работает, если бы это было IEnumerable, но потом (как ни странно) получается BindingList<> не реализует IEnumerable, и мне нужно выполнять такие операции, как Remove а также Add,

1 ответ

Решение

Так как BindingList<T> не объявлен как BindingList<out T> - не поддерживает ковариацию

Дайте это прочитать:

Часто задаваемые вопросы о ковариантности и контравариантности

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