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

C# 访问不同命名空间中的枚举,c#,enums,namespaces,C#,Enums,Namespaces,我在VS2005中使用C#。我有一个类库,其中包含多个不同项目共有的枚举。当访问其中一个枚举时,我必须指定枚举的整个命名空间路径,即使我已向包含该枚举的命名空间声明了“using”指令 例如,我有以下枚举: namespace Company.General.Project1 { public static class Rainbow { [Flags] public enum Colours { Red, Blue, Or

我在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”指令,我仍然需要直接编写枚举。 为什么我不能执行以下操作…

using Company.General.Project1;

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

枚举不只是在名称空间中,它是一种嵌套类型。事实上,您的示例“工作”代码不会工作,它必须工作

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…)


编辑:我一直认为您确实希望能够使用
颜色。红色
等。您可以使用嵌套类型保留当前结构,只需编写:

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

但是,除非您有特定的理由使枚举嵌套,否则我不会这样做。

您可以将枚举移出静态类-它们可以自己存在。因此,这将起作用:

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

+1-如果保留在彩虹课程中,应该能够使用“Rainbow.colors.Red”作为缩短版本。这是他的主要问题,为什么使用时它不起作用。:)我已经将枚举从静态类中移出,现在可以按我所希望的方式访问它。非常感谢。很抱歉让您做了额外的工作-我发布的代码只是强调名称空间情况的示例代码,为了保持简单,我省略了按位值和int转换。