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

C# 枚举只能保存数值而不能保存字符串吗?,c#,.net,enums,C#,.net,Enums,我有这个枚举: enum ASCIIChars { BLACK = "@", CHARCOAL = "#", DARKGRAY = "8", MEDIUMGRAY = "&", MEDIUM = "o", GRAY = ":", SLATEGRAY = "*", LIGHTGRAY

我有这个枚举:

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。

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

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

< P>线程标题中的问题的答案是:是。

Cf:

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


你在帖子标题中的问题的答案是:是的

Cf:

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


我会建议使用
字典,但我不确定它对你的情况是否有帮助。

我会建议使用
字典,但我不确定它对你的情况是否有帮助。

使用
'
而不是
“@”

使用
'
而不是

您是否有使用枚举的特殊附件?如果不是,您可以使用带有常量的静态类来近似所需的值:

public static class AsciiChars
{
    public const string Black = "@";
    public const string Charcoal = "#";
    ...
    public const string White = " ";
}
然后,您可以像在示例代码中指定的那样使用这些值:

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

您是否有使用枚举的特殊附件?如果不是,您可以使用带有常量的静态类来近似所需的值:

public static class AsciiChars
{
    public const string Black = "@";
    public const string Charcoal = "#";
    ...
    public const string White = " ";
}
然后,您可以像在示例代码中指定的那样使用这些值:

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

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


.

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


.

顺便说一句,这是一种将颜色转换为单色的糟糕方法。@Ed-他没有转换为单色,似乎他正在将红色阴影映射到ASCII字符以生成ASCII艺术。你有更好的方法吗?顺便说一句,这是一种可怕的将颜色转换为单色的方法。@Ed-他没有转换为单色,似乎他正在将红色的阴影映射到ASCII字符以生成ASCII艺术。你有更好的方法吗?