Рассмотрим следующий случай:
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
', но может быть, я пропускаю крайний случай здесь. Кроме того, как я могу сделать эту работу? Спасибо!