Подстановка типа в универсальный метод - C#
Формулировка задачи:
Всем здравствовать.
Вопрос:
Можно ли в универсальном методе не указывать тип T явно, а подставлять вместо него некоторую переменную типа? Переменную типа Type поставить не получается. Хотелось бы достичь следующего вида кода:
Совсем бесполезная затея или есть вариант, похожий на представленный выше?
Надеюсь на ваши ответы.
class VisualObject { ... } class VisualObjectHeir : VisualObject { ... } public List<T> GetObject<T>() where T : VisualObject { ... } static void Main() { VisualObjectHeir visualObjectHeir = new VisualObjectHeir(); Type t = visualObjectHeir.GetType(); List<t> = GetMap<t>(); }
Решение задачи: «Подстановка типа в универсальный метод»
textual
Листинг программы
class Program { class Block { public string name; } class Block1 : Block { } class Block2 : Block { } class UniMap { List<Block> mapT = new List<Block>(); public string Name; public Block this[int index] { get { return mapT[index]; } set { mapT[index] = value; } } } class UniMaps { Dictionary<Type, UniMap> uniMaps = new Dictionary<Type, UniMap>() { { typeof(Block1), new UniMap() { Name ="Block1 map" } }, { typeof(Block2), new UniMap() { Name ="Block2 map" } }, }; public UniMap GetUniMap(Block Block) { if (uniMaps.ContainsKey(Block.GetType())) { return uniMaps[Block.GetType()]; } else throw new Exception("Нет карты необходимого типа."); } } static void Main(string[] args) { UniMaps UM = new UniMaps(); Block b = new Block1(); UniMap map = UM.GetUniMap(b); Console.WriteLine(map.Name); Console.ReadLine(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д