2015-10-07 218 views
2

我可以在C#中为枚举值名称制作别名吗? 比如我有两个文件:A和B.C#中枚举值名称的别名

public class A 
{ 
    public enum myEnum 
     { 
      value_1, 
      value_2 
     }; 
} 

而且我要在B级使用此枚举:

public class B 
{ 
private A.myEnum[] tab = { A.myEnum.value_1, A.myEnum.value_2, A.myEnum.value_1 ..} 

} 

我想为一个别名: A.myEnum。 _1和A.myEnum.value_2 这样我就可以写

private A.myEnum[] tab = { alias_1, alias_2}, 
+1

你为什么不拉枚举类A的外?那么你不必使用类名。使用枚举名称并对其进行黑客攻击是正常的,因此您没有枚举名称可能会导致代码混淆。 – juharr

+0

因为我需要这个类的枚举。加上它唯一的例子 – JohnT

+1

为什么你需要它在A中定义?如果你公开它并把它放在同一个命名空间中,你仍然可以在A中使用它。作为例子,你可能已经描述了一个[XY问题](http://meta.stackexchange.com/questions/66377/what-the-xy-problem) – juharr

回答

3

我想我可能失去了一些东西,但:

public class B 
{ 
    private const A.myEnum alias_1 = A.myEnum.value_1; 
    private const A.myEnum alias_2 = A.myEnum.value_2; 

    private A.myEnum[] tab = {alias_1, alias_2}; 
} 
+0

谢谢,那就是我需要的。 – JohnT

0

使用像

public static myEnum GetEnumName(string str) 
{ 
    switch(str) 
    { 
     case "alias_1": return myEnum.Value_1; 
     case "alias_2": return myEnum.Value_2; 
     default: throw new Exception(); 
    } 
} 
0

一个辅助方法,你只可以得到所有的值,并把它们变成一个数组:

myEnum[] tab = Enum.GetValues(typeof(myEnum)).Cast<myEnum>().ToArray();