编译为C# 3.0、ISO-1或ISO-2有什么区别?

19
在Visual Studio 2010中,“高级构建设置”下有“语言版本”的以下选项:
  • 默认
  • ISO-1
  • ISO-2
  • C# 3.0
以C# 3.0编译是否有任何优势,例如基准速度或稳定性?

1
http://msdn.microsoft.com/en-us/library/f4ckecs0.aspx - JP Hellemons
能否让Visual Studio不仅支持早期的.NET框架,还支持早期的C#语法? - AakashM
3
“ISO-1是任何新的C#项目的默认设置。” - 你确定吗?我得到的是默认为default... - AakashM
@AakashM 你是对的,我已经纠正了问题。 - Contango
3个回答

18

唯一应该涉及它的时候是你在使用VS 2010等编写代码,但你想让代码能够在早期的编译器(如VS 2005或VS 2003)上编译。这将限制语言功能,例如LINQ(仅在C#3中),迭代器块(仅在ISO-2及以上版本中)等。

即使如此,它也不是很健壮; 有一些功能检测起来相当棘手,并且不会被检测到 - 某些形式的通用类型推断受到影响,因此您仍应针对早期的编译器进行测试。

除非你有理由,否则请使用"default"。通常,“默认情况下”会选择默认选项。如果它选择了ISO-1,则说明您在某个时刻更改了VS设置。

通常不会与此相关联速度差异 - 它与可用的语言有关; 但是,我尚未检查某些微妙的情况,例如如果早期的编译器被选中,那么类似字段的事件实现是否会恢复到旧方式。


8

保留默认设置即可,这意味着您可以使用所有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#语言规范中的语法。

2
我建议添加ISO-1对应于在.net 1.0/1.1框架中使用的C#版本,而ISO-2对应于2.0框架中的版本。较新的语言版本尚未提交给ISO。维基百科将C# 3列为框架版本2.0、3.0和3.5。默认情况下对应于4.0框架。 - Dan Is Fiddling By Firelight

1
回答关于优势的问题:在选择C#3或ISO C#时,不应该有明显的性能优势。你获得或失去的是语言特性。例如,C#3拥有“var”、对象初始化器、自动属性、扩展方法、Lambda表达式等等。
如果你希望你的代码可以在非C#3的环境中构建,比如旧版.Net或.Net CF的Mono版本,那么你需要避免使用这些特性。当然,在C#3中也可以编写不使用这些特性的代码,所以ISO C#也可以在C#3及以上版本中工作。
我听说过有人争论LINQ之类的东西在某些情况下可能效率低下,所以你可以说,良好编写的ISO C#可能会更高效。但我并不完全同意这个一刀切的说法,如果你遇到性能问题,你需要对代码进行分析,并修复热点区域;避免使用LINQ(例如)并不能保证获得更高效的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接