【问题标题】:C# Switch enum at runtimeC# 在运行时切换枚举
【发布时间】:2014-06-27 12:16:09
【问题描述】:

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

重要提示:此代码必须经过预编译,因此无法使用预处理器指令。

【问题讨论】:

  • 作为忠告,所有enums 本质上都是静态的,因此没有必要像这样“重新声明”它们。 stackoverflow.com/questions/4567868/…
  • 似乎真的具有误导性,即使我想知道是否可能,我也不确定..
  • 我认为public static enum 中的static 没有为您做任何事情或不起作用 - troubles declaring static enum, C#
  • 是的,它们不需要是静态的 :)(已编辑问题)
  • 你不能拥有一个不同的枚举,具体取决于使用它的对象(或谁)。这没有意义。

标签: c# precompiled


【解决方案1】:

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

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

请注意,我不得不重命名你的一个名字。

您可以比较整数值,即使名称为 true(Roles.Staff == Roles.Usertrue

但就像在 cmets 中一样,我不会强烈推荐它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多