条件编译取决于编译器版本

Den*_*nis 10 c# c#-6.0

我正在寻找一种方法来实现这样的事情:

#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
    foo?.Bar();
#else
    if (foo != null)
    {
        foo.Bar();
    }
#endif
Run Code Online (Sandbox Code Playgroud)

当然,我可以自己定义一个条件编译符号,但它不适合.

有内置常量吗?
我发现的问题相当陈旧.也许,事情变得最好了?

xan*_*tos 2

不,据我所知,他们没有改变任何东西:-)

您也许可以在 csproj 中做一些魔法来定义常量...但它很复杂...

没有直接指定 CSC 版本的属性...有一个属性 ( $(LangVersion)) 指定所需语言标准的版本...但通常设置为default“编译器支持的最大版本”...

或者您可以查看 CSC 编译器的路径...它存储在 中CscToolPath,或者,如果该路径为空,则存储在MsBuildToolsPath. 从那里也许您可以辨别 CSC 的版本。