К сожалению, вы не можете сделать это просто так, но вы можете использовать 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());