C#中的类型推断
我知道msdn应该是第一个去的地方,它将在我得到这里的独家新闻之后。 作为技术规范的一部分,msdn不会真正提供的是我现在要问的问题:
- 主题在日常开发过程中的用途如何?
- 它是否与clr中的匿名类型具有任何形状或forms的相关性?
- 如果没有它,它还能做什么呢?
- 哪些.netfunction依赖于主题,如果不作为框架的一部分就不可能存在?
为了记录问题的具体细节,如果使用lambdas和类型推断调用该方法,那么知道(在伪代码中)编译器如何实际确定所需类型将是非常有趣的。
我期待看到编译器逻辑流程如何找到该类型。
类型推断发生在C#的许多地方,至少如下:
-
var
关键字,它告诉编译器根据初始化变量来推断(推导)变量的正确类型 - 只要可以从参数中推导出类型参数,就可以将类型参数从通用方法调用中删除
- 能够从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
关键字你就不能让变量以类型安全的方式引用匿名类型(你总是可以使用object
或dynamic
),这使得它很漂亮使用匿名类型时很重要。
3)就我所能想到的一切而言。 这只是一个方便的function。 当然,它的缺席会使上述匿名类型不那么有用,但它们大多也是一个便利function。
4)我认为3)也回答这个问题。
- 它是语法糖。
- 不是我知道的。
- 它大大简化了程序员的工作。
- LINQ。