一个枚举只能保存数值而不是字符串?
问题描述:
我有这样的枚举:一个枚举只能保存数值而不是字符串?
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。
答
是的,你不能那样做。枚举值仅为数字。考虑定义一个静态结构映射枚举值字符串/字符值,或更改您的枚举类与一个预定义的静态实例对应于每个枚举值。
答
你在线程标题中的问题的答案是:是的。
比照http://msdn.microsoft.com/en-us/library/sbbt4032.aspx:
每个枚举类型都有一个基本类型,其可以是除炭任何整数类型。枚举元素的默认基础类型是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;
}
顺便说一句,这是一种可怕的方式来将颜色转换为单色。 – 2010-07-11 01:02:29
@Ed - 他没有转换为单色,它会出现他将红色阴影映射到ASCII字符以生成ASCII艺术。你有更好的方式来做这件事吗? – 2010-07-11 02:25:30