Получить тип класса с помощью строки - PullRequest
0 голосов
/ 07 мая 2020

Вот строка, определяющая имя класса.

string classname = "MyClass";

Вот и класс.

class MyClass{ 
}

Я хочу использовать строку для generictype.

ex ) List<Myclass>

Что делать?

Я пробовал это, но не работает.

List <Type.GetType($"ConsoleApp1.{classname}")> classlist;

1 Ответ

0 голосов
/ 07 мая 2020

К сожалению, вы не можете сделать это просто так, но вы можете использовать Reflection для этого. Пример может выглядеть так:

using System;
using System.Collections.Generic;

namespace StackOverflow
{
    public class MyClass
    {
    }

    public class Program
    {
        static void Main(string[] args)
        {
            string className = "StackOverflow.MyClass";

            // Generating the generic list
            var type = Type.GetType(className);
            var listType = typeof(List<>).MakeGenericType(new[] { type }); 
            var list = Activator.CreateInstance(listType);

            // Adding a value to the list
            var value = new MyClass();
            list.GetType().GetMethod("Add").Invoke(list, new object[] { value });

            // Fetch a value of the list
            var myClass = (MyClass)list.GetType().GetMethod("get_Item").Invoke(list, new object[] { 0 });

            // Invoke methods of MyClass-instance
            Console.WriteLine(myClass.ToString());                                        

            // Keep console open
            Console.ReadLine();
        }
    }
}

Как madreflection упоминал в комментариях выше, вы можете найти дополнительные примеры здесь .

Чтобы немного проясните ситуацию, вы можете использовать list из object вместо создания списка через reflection.

string className = "StackOverflow.MyClass";
var type = Type.GetType(className);

// Generating the list of objects
var list = new List<object>();

// Adding a value to the list
var value = Activator.CreateInstance(type);
list.Add(value);

// Fetch a value from the list
var myClass = (MyClass)list[0];

// Invoke methods of MyClass-instance
Console.WriteLine(myClass.ToString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...