Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

C# - вернуть типизированную коллекцию

04.04.24 10:12
C# - вернуть типизированную коллекцию
 
alex445 патриот
Последний раз изменено 04.04.24 10:21 (alex445)

Есть система классов


class Base

class Derived1 : Base

class Derived2 : Base


Есть коллеции объектов наследованных классов


List<Derived1> Derived1Collection
List<Derived2> Derived2Collection


Хочу дженерик метод для класса, где хранятся эти коллекции, который вернёт любую из этих коллекций. Типа такого


GetData<Derived1>();


Сделал так


public static IEnumerable<T> GetData<T>() where T : Base
    => typeof(T) switch
    {
        _ when typeof(T) == typeof(Derived1) => Derived1Collection.Cast<T>(),
        _ when typeof(T) == typeof(Derived2) => Derived2Collection.Cast<T>(),
        _ => throw new Exception($"{typeof(T)} is not supported."),
    };


Ошибок компиляции не показывает, но ещё не юзал.


Мне не нравится - некрасиво. Лишняя хреть typeof(T) перед свичом. И зачем-то требует Cast, а без него пишет


Cannot implicitly convert type List<Derived1> to IEnumerable<T>


Что за глупость? Не может сконверить более унаследованный класс в менее унаследованный? Причём менее унаследованный что для коллекции, что для типа коллекции - Derived1 кастуется в Base, List кастуется в IEnumerable - у нас же ковариация тут работает для IEnumerable .

 

Перейти на