Chr*_*s B 3 c# enums namespaces
我在VS2005中使用C#.我有一个类库,其中包含许多不同项目共有的几个枚举.当访问其中一个枚举时,我必须指定枚举的整个命名空间路径,即使我已经向包含枚举的命名空间声明了"using"指令.
例如,我有以下枚举:
namespace Company.General.Project1
{
public static class Rainbow
{
[Flags]
public enum Colours
{
Red,
Blue,
Orange
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个项目中:
using Company.General.Project1;
namespace Company.SpecialProject.Processing
{
public class MixingPallette
{
int myValue = Company.General.Project1.Colours.Red;
}
}
Run Code Online (Sandbox Code Playgroud)
即使我有'Using'指令引用包含枚举类的项目,我仍然需要写enum longhand. 为什么我不能做以下事情......
using Company.General.Project1;
namespace Company.SpecialProject.Processing
{
public class MixingPallette
{
int myValue = Colours.Red;
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 15
您的枚举不只是在命名空间中 - 它是嵌套类型.实际上,您的样本"工作"代码将不起作用,它必须是
int myValue = (int) Company.General.Project1.Rainbow.Colours.Red;
Run Code Online (Sandbox Code Playgroud)
(您不仅需要包含该Rainbow部分,而且还没有从枚举到int的隐式转换.)
使您的枚举成为顶级类型:
namespace Company.General.Project1
{
[Flags]
public enum Colours
{
Red,
Blue,
Orange
}
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以写:
using Company.General.Project1;
...
Colours x = Colours.Red;
int y = (int) Colours.Red;
Run Code Online (Sandbox Code Playgroud)
(请注意,要[Flags]有效使用,您应该明确指定值,例如1,2,4,8 ......)
编辑:我一直在假设你真的希望能够使用Colours.Red等.你可以保持你当前的结构,使用嵌套类型,然后写:
Rainbow.Colours x = Rainbow.Colours.Red;
int y = (int) Rainbow.Colours.Red;
Run Code Online (Sandbox Code Playgroud)
但是,除非你有特殊的理由让enum嵌套,否则我不会.