c# - 取决于编译器版本的条件编译

标签 c# c#-6.0

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

#if CSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHER
    foo?.Bar();
#else
    if (foo != null)
    {
        foo.Bar();
    }
#endif

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

有没有内置常量?
我发现的问题相当陈旧。也许,东西都变好了?

最佳答案

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

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

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

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

关于c# - 取决于编译器版本的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983262/

相关文章:

c# - 使用 C# 6.0 功能运行 TFS Build

c# - Readonly getters VS 类似属性的函数

c# - 使用字符串插值中的变量指定小数位

c# - 执行数据读取器时索引超出范围

c# - 在 MahApps.Metro 中使用数据绑定(bind) ItemsControl 时显示 WindowCommands 的分隔符

c# - 正则表达式在空格后获取第一组,并希望使用相同的正则表达式删除 $

mono - Mono MCS 中的 C# 6.0 字符串插值

c# - C# 内插字符串中的可选参数有什么用?

c# - 如何通过手动验证使 MobileNo、EmpOfficeCode 等实体在 EF core Razor 页面中唯一

c# - MvvmLight RaisePropertyChanged ("")