Подстановка типа в универсальный метод - C#

Узнай цену своей работы

Формулировка задачи:

Всем здравствовать. Вопрос: Можно ли в универсальном методе не указывать тип T явно, а подставлять вместо него некоторую переменную типа? Переменную типа Type поставить не получается. Хотелось бы достичь следующего вида кода:
Листинг программы
  1. class VisualObject { ... }
  2. class VisualObjectHeir : VisualObject { ... }
  3. public List<T> GetObject<T>() where T : VisualObject
  4. { ... }
  5. static void Main()
  6. {
  7. VisualObjectHeir visualObjectHeir = new VisualObjectHeir();
  8. Type t = visualObjectHeir.GetType();
  9. List<t> = GetMap<t>();
  10. }
Совсем бесполезная затея или есть вариант, похожий на представленный выше? Надеюсь на ваши ответы.

Решение задачи: «Подстановка типа в универсальный метод»

textual
Листинг программы
  1. class Program
  2. {
  3.     class Block
  4.     {
  5.         public string name;
  6.     }
  7.  
  8.     class Block1 : Block
  9.     {
  10.     }
  11.  
  12.     class Block2 : Block
  13.     {
  14.     }
  15.  
  16.     class UniMap
  17.     {
  18.         List<Block> mapT = new List<Block>();
  19.         public string Name;
  20.  
  21.         public Block this[int index]
  22.         {
  23.             get { return mapT[index]; }
  24.             set { mapT[index] = value; }
  25.         }
  26.     }
  27.  
  28.     class UniMaps
  29.     {
  30.         Dictionary<Type, UniMap> uniMaps = new Dictionary<Type, UniMap>()
  31.         {
  32.             { typeof(Block1), new UniMap() { Name ="Block1 map" } },
  33.             { typeof(Block2), new UniMap() { Name ="Block2 map" } },
  34.         };
  35.            
  36.         public UniMap GetUniMap(Block Block)
  37.         {
  38.             if (uniMaps.ContainsKey(Block.GetType()))
  39.             {
  40.                 return uniMaps[Block.GetType()];
  41.             } else  throw new Exception("Нет карты необходимого типа.");
  42.         }
  43.     }
  44.  
  45.     static void Main(string[] args)
  46.     {
  47.         UniMaps UM = new UniMaps();
  48.         Block b = new Block1();
  49.  
  50.         UniMap map = UM.GetUniMap(b);
  51.         Console.WriteLine(map.Name);
  52.         Console.ReadLine();
  53.     }
  54. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут