C#中的类型推断

时间:2011-02-03 01:24:47

标签: c# .net type-inference

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

  1. 主题在日常开发过程中的准确程度如何?
  2. 在clr中是否有任何形状或形式与匿名类型的相关性?
  3. 如果没有它可以做什么呢?
  4. 哪些.net功能取决于主题,如果不作为框架的一部分就不可能存在?
  5. 为了记录问题的细节,如果使用lambdas和类型推断调用方法,那么知道(在伪代码中)编译器如何实际确定所需类型将是非常有趣的

    我希望看到关于如何找到该类型的编译器逻辑流程。

2 个答案:

答案 0 :(得分:9)

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

  1. var关键字,它告诉编译器使用
  2. 初始化变量来推断(推导)变量的正确类型
  3. 只要可以从参数中推导出类型参数,就可以将类型参数排除在通用方法调用之外
  4. 能够从lambda表达式参数中省略类型,只要它们可以推导出来
  5. 并回答你的问题:

    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)

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