2

我目前有一个枚举定义如下:

public enum ColorEnum { Red, White, Blue, Green };

这些枚举值中的每一个都有一个基础 int 值,我需要能够将其返回给用户。为此,我编写了一个接收枚举并返回int的函数:

public int colorToValue(ColorEnum color)
{
    switch (color)
    {
        case Red:
            return 5;
        case White:
            return 10;
        case Blue:
            return 15;
        case Green:
            return 20;
    }

    return 0;
}

这很好用,但我想知道是否可以通过使用枚举本身来存储基础值来简化事情。例如,我可以将枚举定义如下:

public enum ColorEnum { Red = 5, White = 10, Blue = 15, Green = 20 };

然后将枚举转换为其基础值就像将其转换为 int 一样简单。上述函数简化为:

public int colorToValue(ColorEnum color)
{
    return (int)color;
}

当然,每个枚举条目的值必须是枚举定义所要求的int 。

谢谢!

4

1 回答 1

5

是的,这是完全有效的,并且可以正常工作。枚举完全转换为/从其基础类型转换,并且它们具有规定的值而不仅仅是 1,2,3... 是很常见的。

不过,唯一需要注意的是,反过来也是如此。所以这很好用:

ColorEnum evil = (ColorEnum)(-53); // why not...

您的原始 colorToValue(evil)代码将为此返回0;您的新代码将返回-53。就我个人而言,我可能会抛出一个ArgumentOutOfRangeException.

还有一种Enum.IsDefined方法,但这涉及对值进行装箱。但是如果您确实想检查输入是否为预期值,至少您可以简化:

public int colorToValue(ColorEnum color)
{
    switch (color)
    {
        case Red:
        case White:
        case Blue:
        case Green:
            return (int)color;
        default:
            return 0; // or throw, whatever
    }
}
于 2012-08-21T09:49:49.267 回答