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,这也是我希望它在第一种情况下所做的。 为什么会有这样的差异?
最佳答案
在第一种情况下,您将方法调用的结果分配给实例。在第二种情况下,您丢弃调用的结果。相反,您分配 new T
这是唯一的区别。
关于内联方法调用和单独方法调用之间的 C# 编译器类型推断区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10904954/