【问题标题】:#define preprocessor in c##在c中定义预处理器#
【发布时间】:2016-02-19 16:25:55
【问题描述】:

我来自 C++ 背景,正在努力学习 C#。

我觉得这很烦人,每次我想在控制台上打印一些东西时,我都必须输入类似Console.WriteLine("whatever");的东西

如果我使用的是 C++,我只会用 #define 定义类似 print(x) 的东西,但在 C# 中我无法让它工作。

我的代码是这样的:

#define print(x) Console.WriteLine(x);

问题是 C# 希望我在包含“using system”标头之前将其保留在代码的顶部。因此,编译器不知道ConsoleWriteLine() 是什么。如果我把它放在下面,我会收到一个错误,告诉我我需要把我的预处理器放在顶部。

谁能帮助我并告诉我如何解决这个问题。

【问题讨论】:

  • code snippets,不一样,但有用。
  • 是时候习惯写 2 个单词而不是 1 个单词了。我知道,这是一个巨大的牺牲。

标签: c# console c-preprocessor


【解决方案1】:

没有像预处理器宏这样的缩写,但在 C#6 中,您可以使用 using static 使调用稍微不那么冗长;

using static System.Console;

namespace TestConsole
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            WriteLine ("Test");    // Uses Console.WriteLine
        } 
    }
}

...当然,您可以使用它来获取打印功能;

using static Utility;

static class Utility {
    public static void print(string format, params object[] parms) {
        System.Console.WriteLine (format, parms);
    }
}

namespace TestConsole
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            print ("Test {0}", "this");
        }
    }
}

【讨论】:

    【解决方案2】:

    C#中的#define仅用于定义符号,可以在#if指令中使用。

    来自 MSDN

    #define 指令不能像在 C 和 C++ 中那样用于声明常量值。 C# 中的常量最好定义为类或结构的静态成员。如果您有多个此类常量,请考虑创建一个单独的“常量”类来保存它们。

    符号可用于指定编译条件。您可以使用#if 或#elif 测试符号。也可以使用conditional属性进行条件编译。

    您可以定义符号,但不能为符号赋值。 #define 指令必须出现在文件中,然后才能使用任何不是预处理器指令的指令。

    有一个可以使用的sn-p:

    键入 cw 并按 TAB + TAB

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 2010-10-17
      • 2010-11-10
      • 2011-01-26
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多