我知道msdn应该是第一个去的地方,这将是我在这里得到的消息。作为技术规范的一部分,msdn不会真正提供的是我现在要问的问题:
为了记录问题的细节,如果使用lambdas和类型推断调用方法,那么知道(在伪代码中)编译器如何实际确定所需类型将是非常有趣的
我希望看到关于如何找到该类型的编译器逻辑流程。
答案 0 :(得分:9)
类型推断发生在C#的许多地方,至少如下:
var
关键字,它告诉编译器使用并回答你的问题:
1)它节省了大量的输入,特别是在使用所谓的“LINQ方法”时。比较例如
List<string> myList = new List<string>();
// ...
IEnumerable<string> result = myList.Where<string>((string s) => s.Length > 0)
.Select<string, string>((string s) => s.ToLower());
与
var myList = new List<string>();
// ...
var result = myList.Where(s => s.Length > 0).Select(s => s.ToLower());
2)我不知道“关联”是什么意思,但如果没有var
关键字,你就不能以类型安全的方式引用匿名类型(你总是可以使用{{ 1}}或object
),这在使用匿名类型时非常重要。
3)就我所能想到的一切而言。这只是一个方便的功能。当然,它的缺席会使前面提到的匿名类型不那么有用,但它们大多也是一个便利功能。
4)我认为3)也回答这个问题。
答案 1 :(得分:2)