C#中的类型推断

我知道msdn应该是第一个去的地方,它将在我得到这里的独家新闻之后。 作为技术规范的一部分,msdn不会真正提供的是我现在要问的问题:

  1. 主题在日常开发过程中的用途如何?
  2. 它是否与clr中的匿名类型具有任何形状或forms的相关性?
  3. 如果没有它,它还能做什么呢?
  4. 哪些.netfunction依赖于主题,如果不作为框架的一部分就不可能存在?

为了记录问题的具体细节,如果使用lambdas和类型推断调用该方法,那么知道(在伪代码中)编译器如何实际确定所需类型将是非常有趣的。

我期待看到编译器逻辑流程如何找到该类型。

类型推断发生在C#的许多地方,至少如下:

  1. var关键字,它告诉编译器根据初始化变量来推断(推导)变量的正确类型
  2. 只要可以从参数中推导出类型参数,就可以将类型参数从通用方法调用中删除
  3. 能够从lambda表达式参数中省略类型,只要它们可以推导出来

并回答你的问题:

1)它节省了大量的输入,特别是在使用所谓的“LINQ方法”时。 比较例如

 List myList = new List(); // ... IEnumerable result = myList.Where((string s) => s.Length > 0) .Select((string s) => s.ToLower()); 

 var myList = new List(); // ... var result = myList.Where(s => s.Length > 0).Select(s => s.ToLower()); 

2)我不知道“关联”是什么意思,但是如果没有var关键字你就不能让变量以类型安全的方式引用匿名类型(你总是可以使用objectdynamic ),这使得它很漂亮使用匿名类型时很重要。

3)就我所能想到的一切而言。 这只是一个方便的function。 当然,它的缺席会使上述匿名类型不那么有用,但它们大多也是一个便利function。

4)我认为3)也回答这个问题。

  1. 它是语法糖。
  2. 不是我知道的。
  3. 它大大简化了程序员的工作。
  4. LINQ。