Ожидайте результат Задачи , используя отражение в неуниверсальном методе

Рассмотрим следующий случай:

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;
    }
}

Вызов new Main().Create(typeof(B)) завершится неудачно с

Невозможно привести объект типа 'System.Threading.Tasks.Task[B]' к типу System.Threading.Tasks.Task[A] '

Я не совсем понимаю, потому что в этом случае универсальный метод Create<T> может возвращать только Task<T>, где T всегда получается из' A ', но может быть, я пропускаю крайний случай здесь. Кроме того, как я могу сделать эту работу? Спасибо!

9
задан Razzie 15 January 2016 в 15:53
поделиться