【问题标题】:Difference between compiling as C# 3.0 or ISO-1 or ISO-2?编译为 C# 3.0 或 ISO-1 或 ISO-2 之间的区别?
【发布时间】:2012-02-07 09:59:42
【问题描述】:

在 Visual Studio 2010 中,“高级构建设置”下的“语言版本”有以下选项:

  • 默认
  • ISO-1
  • ISO-2
  • C# 3.0

编译为 C# 3.0 有什么好处,例如基准速度还是稳定性?

【问题讨论】:

标签: c# .net visual-studio compiler-construction


【解决方案1】:

您唯一应该解决这个问题的情况是,如果您在 VS 2010 中编写代码,但您打算在早期的编译器(VS 2005 或 VS 2003)上编译代码。这将限制语言功能,例如 LINQ(仅在 C# 3 中)、迭代器块(仅在 ISO-2 及更高版本中)等。

即便如此,它还是不够健壮;有些特性很难检测到,而且不会被检测到 - 某些形式的泛型类型推断会受此影响,因此您仍应针对较早的编译器进行测试。

除非您有理由,否则请使用“默认”。通常,“默认”是由,呃,默认选择的。如果它选择 ISO-1,那么您在某个时候更改了 VS 设置。

通常没有任何与此相关的速度差异 - 这是关于可用的语言;但是,我没有检查了一些微妙的情况,例如,如果选择了较早的编译器,类字段事件的实现是否会恢复为旧方式。

【讨论】:

    【解决方案2】:

    将此保留为默认值。这意味着您可以使用所有 C# 3.0 语言功能。

    按“F1”,会出现:

    http://msdn.microsoft.com/en-us/library/f4ckecs0(v=vs.110).aspx

    • 默认编译器接受所有有效的语言语法。
    • ISO-1 编译器仅接受 ISO/IEC 23270:2003 C# 语言规范中包含的语法。
    • ISO-2 编译器仅接受包含在 ISO/IEC 23270:2006 C# 语言规范中的语法。此规范可在 ISO 网站上找到。
    • C# 3 编译器仅接受 3.0 版 C# 语言规范中包含的语法。

    【讨论】:

    • 我建议添加 ISO-1 对应于 .net 1.0/1.1 框架中使用的 C# 版本,ISO-2 对应于 2.0 框架中的版本。较新的语言版本尚未提交给 ISO。 C# 3 在 Wikipedia 中被列为框架版本 2.0、3.0 和 3.5。默认对应4.0框架。
    【解决方案3】:

    回答关于优势的问题:选择一个而不是另一个应该没有性能优势。您获得或失去的是语言功能。例如。 C#3 有“var”、对象初始化器、自动属性、扩展方法、lambda 表达式等。

    如果您希望您的代码在非 C#3 环境中构建,例如较旧的 .Net 或 Mono 版本的 .Net CF,那么您需要避免这些。当然,在 C#3 中编写没有这些特性的代码也是可能的,因此 ISO C# 将在 C#3(及更高版本)中工作。

    我听说有人争辩说,在某些情况下,像 LINQ 之类的东西可能效率低下,因此您可能会争辩说,编写良好的 ISO C# 可能性能更高。我不确定我是否真的同意这一笼统的说法,如果您有性能问题,那么您需要分析您的代码并修复热点;避免使用 LINQ(例如)并不能保证代码的性能更高。

    【讨论】:

      猜你喜欢
      • 2011-06-10
      • 2015-10-11
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 2010-11-18
      相关资源
      最近更新 更多