Почему нельзя вывести вложенные универсальные типы?

Учитывая следующие классы ...

public abstract class FooBase<TBar> where TBar : BarBase{}
public abstract class BarBase{}
public class Bar1 : BarBase{}
public class Foo1 : FooBase<Bar1> {}

... и следующий метод ...

public TBar DoSomething<TFoo, TBar>(TFoo theFoo)
    where TFoo : FooBase<TBar>
    where TBar : BarBase
{
    return default(TBar);
}

Почему следующая строка кода не может подразумевать тип возвращаемого значения?

Bar1 myBar = DoSomething(new Foo1());

Вместо этого я должен указать такие общие типы ...

Bar1 myBar = DoSomething<Foo1, Bar1>(new Foo1());
15
задан Dai 27 November 2017 в 02:32
поделиться