Warten Sie auf das Ergebnis von Task <TDerived> mit Reflektion in einer nicht generischen Methode.
Betrachten Sie den folgenden Fall:
class A
{
public int Id;
}
class B : A
{
}
class Main
{
public async Task<int> Create(Type type)
{
MethodInfo method = this.GetType().GetMethod("Create", new Type[] { typeof(string) }).MakeGenericMethod(new Type[] { type });
A a = await (Task<A>)method.Invoke(this, new object[] { "humpf" });
return a.Id;
}
public async Task<T> Create<T>(string name) where T : A
{
T t = await Foo.Bar<T>(name);
return t;
}
}
Callingnew Main().Create(typeof(B))
wird mit einem @ fehlschlag
Objekt vom Typ '@ kann nicht umgewandelt werdSystem.Threading.Tasks.Task[B]
' tippen 'System.Threading.Tasks.Task[A]
'
Ich verstehe nicht ganz, weil in diesem Fall die generischeCreate<T>
-Methode kann nur ein @ zurückgebTask<T>
woT
wird immer von '@ abgeleitA
', aber vielleicht fehlt mir hier ein Randfall. Wie kann ich diese Arbeit außerdem machen? Vielen Dank