C# 访问不同命名空间中的枚举
我在VS2005中使用C#。我有一个类库,其中包含多个不同项目共有的枚举。当访问其中一个枚举时,我必须指定枚举的整个命名空间路径,即使我已向包含该枚举的命名空间声明了“using”指令 例如,我有以下枚举: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
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转换。