为预处理器指令赋值

Posted

技术标签:

【中文标题】为预处理器指令赋值【英文标题】:assign value to preprocessor directive 【发布时间】:2016-09-27 20:54:34 【问题描述】:

要么我不理解预处理器指令,要么它们不起作用。

我正在尝试为多个框架编写应用程序。 (DNX451、DNX46、NETSTANDARD1_5、...)

所以我总是要写一些类似的东西(非常简单的例子,我知道我在这里不需要它)

public class Test

#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
    public int? testVar;
#else
    public int testVar;
#endif

    public string Method()
    
#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
        return (testVar ?? 0).ToString();
#else
        return testVar.ToString();
#endif
    

那么有可能定义一个变量吗?至少每个文件,所以我可以说例如:

#define NetCore (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)

所以我只需要写

public class Test

#if !NetCore
    public int? testVar;
#else
    public int testVar;
#endif
....

代码会少得多,我可以在我的文件顶部定义它。

或者这对于预处理器指令是不可能的?

【问题讨论】:

您可以选择在.csproj 中添加条件吗? @Caramiriel 嗯,如果真的不可能在代码中定义它,那将是一个选项。 【参考方案1】:

这似乎对我有用(必须在文件顶部):

#if (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0)
#define NetCore
#endif

【讨论】:

哦,是的,现在......这个简单而合乎逻辑的解决方案。有时是时候在编码之前睡觉了 :D 谢谢!这完全是我搜索的内容。

以上是关于为预处理器指令赋值的主要内容,如果未能解决你的问题,请参考以下文章

为 Windows 7 定义预处理器指令

您可以为 C# 版本添加预处理器指令吗?

C#预处理器指令

Objective-C 预处理器指令

预处理器指令

C 预处理器