奇怪的编译器行为 - 可选参数
Posted
技术标签:
【中文标题】奇怪的编译器行为 - 可选参数【英文标题】:Strange compiler behaviour - optional parameter 【发布时间】:2012-03-03 00:25:22 【问题描述】:在我的项目中,一些开发人员添加了在参数列表中具有可选参数的方法:
public static string GeneratetPopupCall(string pageName,bool withEscapeChar = false)
我知道可选参数是 C# 4.0 的一部分。 但是我们的项目是针对 .net 3.5 的。 (C# 3.0)
我的问题是: 如果 3.5 不支持可选参数,为什么会编译?为什么没有编译或语法错误?
【问题讨论】:
第一件事是阅读***.com/questions/247621/… 你说得对,我已经修复了nb版本。 【参考方案1】:在 Visual Studio 中,您可以指定给定项目的语言版本(项目属性 -> 构建 -> 高级)。 Visual Studio 使用 v4.0 编译器来定位 v3.5 框架。
虽然这可行,但在其他情况下可能会导致问题。例如,调用不同版本编译器的自动构建环境显然会失败。只是需要注意的事情......
【讨论】:
【参考方案2】:只要您使用Visual Studio 2010
,即使使用较旧的.NET Frameworks
然后是4.0,您也可以使用可选参数。
更多信息可以找here
【讨论】:
【参考方案3】:您正在使用 4.0 编译器,针对 3.5 框架。
这将编译为与运行时 2.0 兼容的 IL。
【讨论】:
所以这意味着我可以将针对 3.5 框架的项目用于 4.0 的任何新功能?? @MarekKwiendacz - 仅当编译器能够生成正确的 2.0 运行时 IL 时。 但是框架 4.0 的原生 CLR 是 CLR 4。有没有办法检查新功能是否可以在 CLR 2 中使用。除了尝试编译和执行。 @MarekKwiendacz - 如果您以 2.0 运行时为目标,编译器会报错,并且无法编译兼容的 IL。以上是关于奇怪的编译器行为 - 可选参数的主要内容,如果未能解决你的问题,请参考以下文章