Подстановка типа в универсальный метод - 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();
    }
}

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


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

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

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