2012-02-10 121 views
3

在我的项目已经在参数列表可选参数的一些开发者添加方法:奇怪的编译器行为 - 可选参数

public static string GeneratetPopupCall(string pageName,bool withEscapeChar = false) 

我知道,可选参数为C#4.0的一部分。 但是我们的项目是针对.net 3.5。 (C#3.0)

我的问题是:
为什么编译3.5如果不支持可选参数?为什么这不是编译或语法错误?

+4

第一件事是阅读http://stackoverflow.com/questions/247621/what-are-the-correct-version-numbers-for-c – AakashM 2012-02-10 14:37:13

+0

你是对的,我已修复版本号。 – 2012-02-10 14:47:35

回答

7

您正在使用4.0 编译器,针对3.5框架。

这编译为与运行时2.0兼容的IL。

+0

所以这意味着我可以使用针对3.5框架的项目从4.0的任何新功能? – 2012-02-10 14:40:57

+0

@MarekKwiendacz - 只有编译器可以生成正确的2.0运行时IL。 – Oded 2012-02-10 14:41:35

+0

但是框架4.0的原生CLR是CLR 4.是否有任何方法可以检查CLR 2中是否可以使用新功能。除尝试编译和执行外。 – 2012-02-10 14:45:58

2

只要您使用Visual Studio 2010,即使使用较旧的.NET Frameworks和4.0,也可以使用可选参数。

的更多信息,可以找到here

1

在Visual Studio中,您可以指定语言版本为给定的项目(项目属性 - >生成 - >高级)。 Visual Studio使用v4.0编译器来定位框架的v3.5。

虽然这可行,但在其他情况下可能会导致问题。例如,调用不同版本的编译器的自动构建环境显然会失败。只是要注意的...