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

编译为C#3.0或ISO-1或ISO-2之间的区别?,c#,.net,visual-studio,compiler-construction,C#,.net,Visual Studio,Compiler Construction,在Visual Studio 2010中,在“高级生成设置”下有以下“语言版本”选项: 违约 ISO-1 ISO-2 C#3.0 编译为C#3.0是否有任何优势,例如基准速度或稳定性?将其保留为默认值。这意味着您可以使用所有C#3.0语言功能 按“F1”,它会显示: 默认值编译器接受所有有效的语言语法 ISO-1编译器只接受ISO/IEC 23270:2003 C#语言规范中包含的语法 ISO-2编译器只接受ISO/IEC 23270:2006 C#语言规范中包含的语法。本规范可在ISO

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

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

编译为C#3.0是否有任何优势,例如基准速度或稳定性?

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

按“F1”,它会显示:

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

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

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

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


通常不存在与此相关的任何速度差-这与可用的langauge有关;但是,我没有检查一些微妙的情况,例如,如果选择了早期的编译器,类字段的事件实现是否会恢复到原来的方式。

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

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


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

qv“ISO-1是任何新C#项目的默认值。”-你确定吗?我把它默认设置为
default
。@AakashM你说得对,我已经纠正了这个问题。我建议添加ISO-1对应于.net 1.0/1.1框架中使用的C版本,ISO-2对应于2.0框架中使用的版本。较新的语言版本尚未提交给ISO。在维基百科中,C#3被列为框架版本2.0、3.0和3.5。Defaul对应于4.0框架工作。