【问题标题】:How to declare enums in C#如何在 C# 中声明枚举
【发布时间】:2014-08-22 00:18:03
【问题描述】:

我真的不明白如何声明一个枚举,我试过这个

enum cardValue {2 = 0, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A}; 

enum cardValue {"2" = 0, "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"};

在这两种情况下,编译器都会抱怨我使用的符号。我知道格式不正确,但是我可以对此做些什么,以便下面的代码开始工作吗? (这里,V 可以是"K""5" 或任何其他值)

struct card
{
    cardValue value;
    cardSuit suit;

    public card(string V, string S)
    {
        value = SomeTransformation(V);
        suit = SomeTransformation(S);
    }
    ...
}

【问题讨论】:

  • 看看C# Enum
  • 你为什么不试试看一下msdn文档?
  • 你想知道如何实现SomeTransformation吗?您不能创建返回两种不同类型的方法。所以你需要一个SomeCardValueTransformation 和一个SomeCardSuitTransformation。您可以检查字符串是否仅包含一个数字 f.e.通过使用int.TryParse,然后调用正确的转换方法。

标签: c# enums declaration


【解决方案1】:

枚举值应该来自同一类型。所以你的第二个例子几乎可以工作。如果您使用标志,则应为所有值指定名称或索引,而不仅仅是一个:

enum cardValue { Val2 = "2", Val3 = "3", Val4 = "4", ValA = "A" };

此外,变量名、类名、枚举值等不能只包含数字。所以名字中必须有一个字符。

【讨论】:

    【解决方案2】:

    枚举可以有字符,默认是 int

    char 类型被归类为整数类型,但它与其他整数类型有两点不同:

    • 没有从其他类型到 char 类型的隐式转换。特别是,即使 sbyte、byte 和 ushort 类型的值范围可以使用 char 类型完全表示,但不存在从 sbyte、byte 或 ushort 到 char 的隐式转换。

    • char 类型的常量必须写为字符文字或整数文字与转换为 char 类型的组合。例如,(char)10 与 '\x000A' 相同。

    【讨论】: