【问题标题】:Type inference in C#C# 中的类型推断
【发布时间】:2011-06-20 09:21:50
【问题描述】:

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

  1. 该主题在日常开发过程中到底有多大用处?
  2. 它是否与 clr 中的匿名类型以任何形式或形式存在关联?
  3. 如果没有它,它就无法完成什么?
  4. 哪些 .net 功能取决于主题,如果不作为框架的一部分就不可能存在?

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

我正在寻找有关如何定位该类型的编译器逻辑流程。

【问题讨论】:

    标签: c# .net type-inference


    【解决方案1】:

    类型推断出现在 C# 中的很多地方,至少如下:

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

    并回答您的问题:

    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 关键字,你就不能让变量以类型安全的方式引用匿名类型(你总是可以使用 objectdynamic),这使得它在使用匿名类型时非常重要。

    3) 没有我能想到的。这只是一个便利功能。当然,例如,它的缺失会降低上述匿名类型的用处,但它们主要也是一种便利功能。

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

    【讨论】:

    • 这是一个很好的答案(对于如此广泛的问题!),但是,匿名类型可以在没有var 的情况下存在(用处更有限)。想象一下,就像 LINQ 表达式中的中间体一样。
    【解决方案2】:
    1. 它是语法糖。
    2. 我不知道。
    3. 大大简化了程序员的工作。
    4. Linq.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多