Login
C# - вернуть типизированную коллекцию
1698 просмотров
Перейти к просмотру всей ветки
in Antwort alex445 04.04.24 10:12, Zuletzt geändert 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 вместо этого корявого свича.