内联方法调用和单独方法调用之间的 C# 编译器类型推断区别

标签 c# .net compiler-construction type-inference

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/

相关文章:

c# - 线程的命名约定?

c# - 多维数组-数组数组?

c# - 从文档中获取子元素

c# - 为什么在我的 ASP.Net 网站上大约每周一次出现 System.IO.FileLoadException : Could not load file or assembly,?

.net - 使用 System.Linq.Expressions API 在 LINQ 中选择列

c# - 不能将 Enumerable.Count 与 List 一起使用,编译器假定 List.Count

c# - 测试父对象是否存在

C#pragma 是预处理还是编译时操作?

c++ - 为什么 *must* delete[] 和 delete 是不同的?

apache - 为什么在我的 Apache 服务器上安装 GCC 时得到 "configure:error: no acceptable C compiler found in $PATH"?