我有这个枚举:
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。
答案 0 :(得分:3)
我建议改用Dictionary<AsciiCharacters, char>
。
另一种方式是to use attributes,但我不确定它对你的情况是否有帮助。
答案 1 :(得分:2)
答案 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)
您无法直接保存字符串,但可以使用注释指定字符串值并使用反射进行检索。