编译为C#3.0或ISO-1或ISO-2之间的区别

本文关键字:之间 区别 ISO-2 ISO-1 C#3 编译 | 更新日期: 2023-09-27 18:23:42

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

  • 违约
  • ISO-1
  • ISO-2
  • C#3.0

编译成C#3.0有什么好处吗,比如基准速度或稳定性?

编译为C#3.0或ISO-1或ISO-2之间的区别

如果您在VS 2010中编写代码,但您打算在早期的编译器(VS 2005或VS 2003)上编译代码,那么您唯一应该处理这个问题。这将限制语言特性,如LINQ(仅在C#中)、迭代器块(仅在ISO-2及以上版本中)等。

即便如此,它也不稳健;有些特性很难检测到,也不会被检测到——某些形式的泛型类型推理会受到影响,因此您仍然应该针对早期的编译器进行测试。

除非有原因,否则使用"默认"。通常情况下,"默认"是由呃默认选择的。如果选择ISO-1,那么您已经在某个时刻更改了VS设置。

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

将此选项保留为默认值。这意味着您可以使用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#语言规范中包含的语法

回答关于优势的问题:选择其中一个不应该有任何性能优势。你获得或失去的是语言特征。例如,C#3有"var"、对象初始值设定项、自动属性、扩展方法、lambda表达式等。

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

我听过有人说,像LINQ这样的东西在某些情况下可能效率低下,所以你可以说写得好的ISO C#可能更具性能。我不确定我是否真的同意这一笼统的说法,如果你有性能问题,那么你需要分析你的代码并修复热点;避免LINQ(例如)并不能保证代码具有更高的性能。