Ваш вопрос кажется немного неясным, но, глядя на мой хрустальный шар, кажется, что вам нужен метод Activator.CreateInstance
https://docs.microsoft.com/en-us/dotnet/api/system.activator.createinstance?view=netframework-4.8
Stati c создание типа
public class StaticFactory
{
public static T StaticInstance<T>() where T : class, new()
{
var entityType = typeof(T);
return (T) Activator.CreateInstance(entityType);
}
}
Использование
var model1 = StaticFactory.StaticInstance<Boss>();
var model2 = StaticFactory.StaticInstance<Boss>();
var models = new List<dynamic> { model1, model2 };
Dynami c создание типа
public class DynamicFactory
{
public static dynamic DynamicInstance(Type someType)
{
return Activator.CreateInstance(someType);
}
}
Использование
var model1 = DynamicFactory.DynamicInstance(typeof(Boss));
var model2 = DynamicFactory.DynamicInstance(someEmployeeVariable.GetType());
var models = new List<dynamic> { model1, model2 };
Создание интерфейса
public interface SomeInterface
{
void DoWork();
}
public enum EnumType
{
Boss,
Employee
}
public class InterfaceFactory
{
public static SomeInterface InterfaceInstance(EnumType enumType)
{
switch (enumType)
{
case SomeType.Boss: return new Boss();
case SomeType.Employee: return new Employee();
}
return null;
}
}
Использование
var model1 = InterfaceFactory.InterfaceInstance(EnumType.Boss);
var model2 = InterfaceFactory.InterfaceInstance(EnumType.Boss);
var models = new List<SomeInterface> { model1, model2 };
Вы также можете извлечь базовый тип из родительского типа, например, int в List<int>
List<int> myList = ...
Type myListElementType = myList.GetType().GetGenericArguments().Distinct(); // all types in the list, in this case int