Sie wären nämlich nicht in der Lage, die letzte Zeile zu schreiben.
Aber wahrscheinlich wollen Sie das Objekt nicht einfach nur um des Erstellens willen erstellen. Wahrscheinlich wollen Sie eine Methode für Ihre neu erstellte Instanz aufrufen.
Sie benötigen dann so etwas wie eine Schnittstelle :
public interface ITask
{
void Process(object o);
}
public class Task<T> : ITask
{
void ITask.Process(object o)
{
if(o is T) // Just to be sure, and maybe throw an exception
Process(o as T);
}
public void Process(T o) { }
}
und rufen Sie es mit auf:
Type d1 = Type.GetType("TaskA"); //or "TaskB"
Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);
ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Item
task.Process(new Item());
In jedem Fall werden Sie nicht statisch auf einen Typ gecastet, den Sie vorher nicht kennen (in diesem Fall "makeme"). ITask ermöglicht es Ihnen, zu Ihrem Zieltyp zu gelangen.
Wenn Sie das nicht wollen, müssen Sie wahrscheinlich etwas genauer formulieren, was Sie damit erreichen wollen.