枚举只能保存数值而不是字符串吗?

时间:2010-07-11 00:44:39

标签: c# .net enums

我有这个枚举:

enum ASCIIChars
        {
            BLACK = "@",
            CHARCOAL = "#",
            DARKGRAY = "8",
            MEDIUMGRAY = "&",
            MEDIUM = "o",
            GRAY = ":",
            SLATEGRAY = "*",
            LIGHTGRAY = ".",
            WHITE = " "
        };

以下是我使用它的地方:

private void GetShadeColor(int redValue)
        {
            string ASCII = " ";

            if (redValue >= 230)
            {
                ASCII = ASCIIChars.WHITE;
            }
            else if (redValue >= 200)
            {
                ASCII = ASCIIChars.LIGHTGRAY;
            }
            else if (redValue >= 180)
            {
                ASCII = ASCIIChars.SLATEGRAY;
            }
            else if (redValue >= 160)
            {
                ASCII = ASCIIChars.GRAY;
            }
            else if (redValue >= 130)
            {
                ASCII = ASCIIChars.MEDIUM;
            }
            else if (redValue >= 100)
            {
                ASCII = ASCIIChars.MEDIUMGRAY;
            }
            else if (redValue >= 70)
            {
                ASCII = ASCIIChars.DARKGRAY;
            }
            else if (redValue >= 50)
            {
                ASCII = ASCIIChars.CHARCOAL;
            }                       
            else
            {
                ASCII = ASCIIChars.BLACK;
            }

            ASCIIArt.Append(ASCII);
        }

我在枚举声明中遇到以下错误:

无法将字符串隐式转换为int。

6 个答案:

答案 0 :(得分:3)

我建议改用Dictionary<AsciiCharacters, char>

另一种方式是to use attributes,但我不确定它对你的情况是否有帮助。

答案 1 :(得分:2)

是的,你不能这样做。枚举值仅限数字。考虑定义静态结构,将枚举值映射到字符串/ char值,或将枚举更改为具有与每个枚举值对应的预定义静态实例的类。

答案 2 :(得分:2)

您对使用枚举有什么特别的附件吗?如果没有,您可以通过使用带有常量的静态类来近似您想要的内容:

public static class AsciiChars
{
    public const string Black = "@";
    public const string Charcoal = "#";
    ...
    public const string White = " ";
}

然后,您可以像在示例代码中指定的那样使用这些值:

string ascii;
if (redValue >= 230)
{
    ascii = AsciiChars.White;
}

答案 3 :(得分:0)

主题标题中你的问题的答案是:是的。

Cf http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

  

每个枚举类型都有一个基础类型,除了char之外,它可以是任何整数类型。枚举元素的默认基础类型是int。

答案 4 :(得分:0)

使用'@'而不是"@"

答案 5 :(得分:0)

您无法直接保存字符串,但可以使用注释指定字符串值并使用反射进行检索。

Have a look at this