Если вы действительно должны использовать строки, вы можете использовать отражение:
object GetInstance(string typeName)
{
Type.GetType(typeName).GetConstructor(Type.EmptyTypes).Invoke(new object[0]);
}
Вы также можете использовать словарь:
IDictionary<string, Func<object>> TypeMap = new Dictionary<string, Func<object>>()
{
{ "TypeA", () => new TypeA() },
{ "TypeB", () => new TypeB() },
{ "TypeC", () => new TypeC() },
};
object GetInstance(string typeName)
{
return TypeMap[typeName]();
}
Для других, заходящих на эту страницу, рассмотрите возможность использования обобщений, если у вас нет для использования строк:
T CreateInstance<T>()
where T : new()
{
return new T();
}