insighter
@insighter
-First time? - Huh? (C#, React, JS)

Почему List/IList не является ковариантным?

А тот же IEnumerable является ковариантным. Чем руководствуются разработчики .NET в подобном вопросе?

Пример
class Program
    {
        static void Main(string[] args)
        {
            List<User> users = null;
            List<Administrator> admins = null;

            users = admins; // ошибка потому что List<T> не ковариантен
            IEnumerable<User> users2 = admins; // ошибки нет т.к. IEnumerable<out T> ковариантен
        }
    }

    public class User { }
    public class Administrator : User { }
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега .NET
Токсичный шарпист
Они не являются вариантными, тк T принимается и на вход (Add), и возвращается в методах (Get).
А C# в таких ситуациях не разрешает добавлять соответствующие модификаторы.

Вот с IReadOnlyList такой проблемы нет потому он ковариантен.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы