Я написал этот метод приведения
public MyGeneric<TTarget> Cast<TTarget, TSource>()
where TTarget : class
where TSource : TTarget, T
{
return new MyGeneric<TTarget>();
}
который можно назвать так
MyGeneric<Inherited> inherited;
Foo(inherited.Cast<Base, Inherited>());
Ужасно то, что нужно предоставить класс, которым он уже является. Возможно, возможно некоторое улучшение.
Кстати, мне не удалось сделать это методом расширения, чтобы избежать второго универсального аргумента.