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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage