Подстановка типа в универсальный метод - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д