这似乎是C#编译器推断类型的不同,这取决于如何调用一个方法:C#编译器类型推断差异
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
}.
ExtensionMethod();
}
在这种情况下,编译似乎推断类型的实例是Bar,因为我有一个Bar,其中声明了ExtensionMethod。
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
};
instance.ExtensionMethod();
}
在这种情况下,编译器推断该实例的类型是T,这是我希望它在第一种情况下做的一样好。 为什么会有这样的差异?
的'.'操作者具有很高的优先级,并赋值运算符'='有一个非常低。请参阅[规格](http://msdn.microsoft.com/en-us/library/6a71f45d.aspx)。因此,在第一个例子中,实例被设置为全部'(new T(){ID = 1} .ExtensionMethod())'。这就像'var inst =(A.B);'和'(var inst = A).B;'之间的区别 –