If you have a List<Type> then you have to use typeof in order to get the actual Type instance for a given class.
var typeList = new List<Type>(); typeList.Add(typeof(string)); typeList.Add(typeof(CustomClass));
In order to create instances of the Types stored in typeList, you can use the Activator class. Specifically, Activator.CreateInstance.
foreach (var type in typeList) { var inst = Activator.CreateInstance(type); }
However, this still has some problems that you'll have to solve. For example, inst in the code above will be a reference to an object. You'll have to figure out some way to cast that to whatever type is if you want to use it as an instance of that type.
Also, the code above will only work for types which have a constructor which takes no parameters. If a type in typeList doesn't have a parameterless constructor, the code above will throw a MissingMethodException. This is especially worth mentioning, because in your example you're adding string to typeList, but string does not have an empty constructor.
string str = (string)System.Activator.CreateInstance(typeof(string));List<Func<object>>(), thenlist.Add(() => new object()),list.Add((() => new string()), thenforeach (var t in list} { var obj = t(); }. This isn't a list of types, but rather it's a list of delegates, each of which knows how to create an instance of a particular type