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

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

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

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

唯一一次你应该弄乱这个,如果你在VS 2010中编写代码,但是你打算在早期的编译器(VS 2005或VS 2003)上编译代码。 这将限制语言function,例如LINQ(仅在C#3中),迭代器块(仅在ISO-2及更高版本中)等。

即使这样,它也不健壮; 有一些function非常难以检测,并且不会被检测到 – 某些forms的generics类型推断受此影响,因此您仍应该针对早期的编译器进行测试。

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

通常没有与此相关的任何速度差异 – 它是关于可用的语言 ; 但是,我还没有检查过一些微妙的情况,例如,如果选择了早期的编译器,那么类似字段的事件实现会恢复到原来的状态。

保持默认状态。 这意味着您可以使用所有C#3.0语言function。

按“F1”,它出现:

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

  • default编译器接受所有有效的语言语法。
  • 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或.Net CF的Mono版本,那么您将需要避免这些。 当然,在C#3中编写没有这些function的代码是可能的,因此ISO C#将在C#3(及更高版本)中工作。

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