访问不同命名空间中的枚举

时间:2009-07-13 10:04:11

标签: c# enums namespaces

我在VS2005中使用C#。我有一个类库,其中包含许多不同项目共有的几个枚举。当访问其中一个枚举时,我必须指定枚举的整个命名空间路径,即使我已经向包含枚举的命名空间声明了'using'指令。

例如,我有以下枚举:

namespace Company.General.Project1
{
   public static class Rainbow
   {
    [Flags]
    public enum Colours
    {
      Red,
      Blue,
      Orange
    }
  }
}

然后在另一个项目中:

using Company.General.Project1;

namespace Company.SpecialProject.Processing
{
  public class MixingPallette
  {
    int myValue = Company.General.Project1.Colours.Red;
  }
}

即使我有'Using'指令引用包含enum类的项目,我仍然需要写enum longhand。 为什么我不能执行以下操作...

using Company.General.Project1;

namespace Company.SpecialProject.Processing
{
  public class MixingPallette
  {
    int myValue = Colours.Red;
  }
}

2 个答案:

答案 0 :(得分:15)

您的枚举不只是在命名空间中 - 它是嵌套类型。事实上,你的样本“工作”代码不起作用,它必须是

int myValue = (int) Company.General.Project1.Rainbow.Colours.Red;

(您不仅需要包含Rainbow部分,而且还没有从枚举到int的隐式转换。)

让你的枚举成为顶级类型:

namespace Company.General.Project1
{
    [Flags]
    public enum Colours
    {
        Red,
        Blue,
        Orange
    }
}

然后你就可以写:

using Company.General.Project1;

...

Colours x = Colours.Red;
int y = (int) Colours.Red;

(请注意,要有效地使用[Flags],您应该明确指定值,例如1,2,4,8 ......)


编辑:我一直在假设你确实希望能够使用Colours.Red等。你可以使用嵌套类型保留当前结构,然后写:< / p>

Rainbow.Colours x = Rainbow.Colours.Red;
int y = (int) Rainbow.Colours.Red;

除非你有特别的理由让enum嵌套,否则我不会。

答案 1 :(得分:0)

您可以将您的枚举移出静态类 - 它们可以独立存在。所以这会奏效:

namespace Company.General.Project1
{
  [Flags]
  public enum Colours
  {
    Red,
    Blue,
    Orange
  }
}

using Company.General.Project1;

namespace Company.SpecialProject.Processing
{
  public class MixingPallette
  {
    int myValue = (int)Colours.Red;
  }
}

但是如果你把枚举保留在这个静态类中,那么它只能在那个上下文中引用:

using Company.General.Project1;

namespace Company.SpecialProject.Processing
{
  public class MixingPallette
  {
    int myValue = (int)Rainbow.Colours.Red;
  }
}