如何在C#中使用宏函数生成编译时枚举值?

时间:2019-06-07 12:31:31

标签: c# enums macros

我想生成编译时枚举值。

就像在c中所做的

 #define macfun(x) (128 | ((unsigned int)(x) << 16L)

现在,如果我想生成另一个常量值,

 #define JISCHAR    macfun(3)

我正在制作第三方库的C#包装器,它定义了许多不同类型的常量。

我可以在C#编译时实际生成枚举吗?

计算常量并将其分配给变量的其他方法是什么?

2 个答案:

答案 0 :(得分:0)

在Visual Studio中,您可以在构建之前和之后运行命令。然后,您可以使用其他程序来生成/编辑该枚举。您基本上可以编辑整个文件。

编辑: 您可以在“项目属性”下找到此选项,然后在“构建事件”下找到

答案 1 :(得分:0)

根据@PaulFhere的类似答案。

一种可能的解决方案可能是:

     public sealed class UnixDBCSPages
     {
        public static readonly uint JIS           = MakeUnixDBCS(Convert.ToUInt32(0x0C));
        public static readonly uint EUCJP         = MakeUnixDBCS(Convert.ToUInt32(0x0D));
        public static readonly uint CNS11643_1    = MakeUnixDBCS(3);
        public static readonly uint EUC_CNS_1     = MakeUnixDBCS(7) ;                             
        public static readonly uint CNS11643_2    = MakeUnixDBCS(4) ;
        public static readonly uint EUC_CNS_2     = MakeUnixDBCS(8);                             
        public static readonly uint KSC1987       = MakeUnixDBCS(6);
        public static readonly uint GB2312        = MakeUnixDBCS(5);


        private static uint MakeUnixDBCS(uint wCodePage)
        {
            uint wUnixUnmask = Convert.ToUInt32(Flags.UnixUnmask);                
            return (wUnixUnmask | wCodePage) << 16;
        }
    }