C#コンパイラは、メソッドの呼び出し方法に応じて型の推測が異なるようです。
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
}.
ExtensionMethod();
}
この場合、ExtensionMethodが宣言されているクラスBarがあるため、コンパイラはインスタンスのタイプがBarであると推測しているようです。
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
};
instance.ExtensionMethod();
}
この場合、コンパイラーはインスタンスのタイプがTであると推測します。これは、最初のケースでも同様に実行されると私が期待することです。なぜそのような違いがあるのですか?