簡體   English   中英

如何用c#中的宏函數生成編譯時枚舉值?

[英]How to generate compile time enum values with a macro function in c#?

我想生成編譯時枚舉值。

正如我們在c

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

現在,如果想要生成另一個常量,我就是這樣做的

 #define JISCHAR    macfun(3)

我正在制作第三方庫的C#包裝器,它定義了許多不同類型的常量。

我可以在C#編譯時實際生成枚舉嗎?

計算常量和賦值給變量的其他方法是什么?

在Visual Studio中,您可以在構建之前和之后運行命令。 然后,您可以使用其他程序生成/編輯此枚舉。 你基本上可以編輯整個文件。

編輯:您在項目屬性下找到此選項,然后在構建事件

根據@PaulF和來自這里的類似答案。

一種可能的解決方案是:

     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;
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM