C#在运行时切换枚举

时间:2014-06-27 12:16:10

标签: c# precompiled

我有两个项目引用相同的预编译(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
}

重要说明:此代码必须预编译,因此无法使用预处理程序指令。

2 个答案:

答案 0 :(得分:1)

你可以拥有它,但它们都不能在同一个命名空间中。你可以有一个module.Extern.Roles,另一个是module.Intern.Roles,但是如果你想要它们在同一个命名空间中,你必须将值组合成一个枚举或更改其中一个它们。

答案 1 :(得分:1)

这可能会让人感到困惑,但如果你真的想要那个方向的东西,通过轻微修改,那么:

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

注意我必须重命名你的一个名字。

您可以比较整数值,即使名称也是真的(Roles.Staff == Roles.Usertrue

但是在评论中我不会强烈推荐它。