c#运行时的开关枚举

本文关键字:枚举 开关 运行时 | 更新日期: 2023-09-27 18:10:37

我有两个项目引用相同的预编译(c#) dll。此.dll在其命名空间中包含一个公共枚举,但是:两个项目必须在此枚举中使用不同的值。

有可能定义这样的东西吗?(伪代码)

namespace module
{
    #if ConfigurationManager.AppSettings["project"] == "Extern"
    public enum Roles
    {
        Admin = 0,
        User = 1,
        Vip = 2
    }
    #else /* "Intern" */
    public enum Roles
    {
        Admin = 0,
        Staff = 1,
        User = 2
    }
    #end
}

重要:此代码必须预编译,因此不可能使用预处理器指令。

c#运行时的开关枚举

这可能会让人感到困惑,但如果你真的想在这个方向上做一些轻微的修改,那么:

    public enum Roles
    {
        Admin = 0,
        Staff = 1,
        User = 1,
        Vip = 2,
        UserInternal = 2,
    }

注意:我不得不重命名你们中的一个名字。

您可以将整数值和偶数与将为真(Roles.Staff == Roles.Usertrue)的名称进行比较。

但是就像评论中所说的那样,我不会强烈推荐它

您可以这样做,但它们不能在同一个名称空间中。您可以有一个是module.Extern.Roles,另一个是module.Intern.Roles,但如果您希望它们在同一个名称空间中,您必须将这些值组合成单个enum或更改其中一个的名称。