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

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

05.04.24 11:41
Re: C# - вернуть типизированную коллекцию
 
alex445 патриот
в ответ alex445 04.04.24 10:12, Последний раз изменено 05.04.24 11:43 (alex445)
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."),
    };

Такой вариант тоже работает - приведение типа сразу для всей коллекции вместо кастинга каждого её элемента:


_ when typeof(T) == typeof(Derived1) => (IEnumerable<T>)Derived1Collection,


Это даже получше будет, т.к. не надо при каждом обращении к GetData проходить по всей коллекции.


typeof(T) перед выражением switch, кстати, не используется. Просто это требования синтаксиса свича. Лучше, наверное, пачку if-else вместо этого корявого свича.

 

Перейти на