【发布时间】:2012-06-05 21:05:18
【问题描述】:
C# 编译器似乎根据调用方法的方式不同地推断类型:
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
}.
ExtensionMethod();
}
在这种情况下,编译器似乎推断出实例的类型是 Bar,因为我有一个声明 ExtensionMethod 的类 Bar。
void Foo<T>() where T : Bar
{
var instance = new T()
{
ID = 1
};
instance.ExtensionMethod();
}
在这种情况下,编译器推断实例的类型是 T,这也是我希望它在第一种情况下所做的事情。 为什么会有这样的差异?
【问题讨论】:
-
.运算符的优先级很高,而赋值运算符=的优先级很低。见spec。因此,在您的第一个示例中,instance 设置为所有( new T() { ID = 1}.ExtensionMethod() )。这就像var inst = (A.B);和(var inst = A).B;之间的区别
标签: c# .net compiler-construction type-inference