У меня есть обобщенный c метод, который выглядит примерно так:
void Foo<A, B>()
{
// Do some stuff with B, some conditionals, etc, e.g.:
using (var scope = _provider.CreateScope())
{
var service = scope.ServiceProvider.GetService<B>();
A result = service.Bar<A>();
}
// Do some more stuff with B
}
Теперь я хотел бы использовать вторую специализированную версию Bar
, которая имеет другой тип возвращаемого значения, что-то вроде следующее:
void Foo<A, B>() where A : List<A>
{
// Do the exact same stuff with B
List<A> result = service.Bar2<A>();
// Do other same stuff with B
}
Методы Bar
могут выглядеть примерно так:
A Bar<A>()
{
return new A();
}
List<A> Bar2<A>()
{
return new List<A>();
}
Есть ли что-то, что я могу сделать, не имея всего дублированного кода, окружающего вызовы Bar
? Могу ли я использовать что-то вроде Func
в качестве параметра? Должен ли я отказаться от использования дженериков здесь и попытаться использовать полиморфизм?