如何将数字用作C#枚举值

时间:2018-11-25 21:47:36

标签: c# enums

这是有效的:

public enum Size
{
    Eight,
    EightAndOneHalf
};

但是如何在C#枚举中使用数字,如下所示?可能吗还是代表这种结构的首选方法?

public enum Size
{
    8,
    8.5
};

4 个答案:

答案 0 :(得分:2)

您可以使用结构:

public struct Size
{
        public const double Eight = 8;
        public const double EightPointFive = 8.5;
        public const double Nine = 9;
        // Add Remaining units / values
}

然后可以像这样使用:

double size = Size.Eight;

或者可以这样做:

enum Size {
    Eight, EightPointFive, Nine
}

然后使用如下函数:

public float GetSize(Size size)
{
    switch (size)
    {
        case Size.Eight :
            return 8;
        case Size.EightPointFive :
            return 8.5;
        // rest of the sizes.
        default: return -1;
    }

    //unhandled
    return -1;
}

答案 1 :(得分:1)

如果您将其命名为常量,则可以创建如下内容:

public static class Size
{
    public const double Eight = 8.0;
    public const double EightAndOneHalf = 8.5;
}

然后您将使用它:

var mySize = Size.EightAndOneHalf;

但是,您无法枚举“假”枚举,因此,如果要执行此操作,则必须添加类似以下内容:

public static class Size
{
    public const double Eight = 8.0;
    public const double EightAndOneHalf = 8.5;

    public static IEnumerable<double> All = new double[] { Eight, EightAndOneHalf };
}

然后您可以执行以下操作:

foreach(var size in Size.All)
{
    // code here
}

此基本思想用于框架本身。例如:https://github.com/aspnet/Identity/blob/master/src/Identity/IdentityConstants.cs

答案 2 :(得分:0)

在它们的核心,枚举仅次于编译时间常数,它们被分组,从而获得某种类型的安全性。它既具有自定义类型的优点,也只是用于处理的数字和在代码中使用常量的优点。

Enums的默认类型是整数之一,默认值从0开始,向上计数。虽然类型和值可以覆盖,但不能随意更改。 必须是整数。

由于枚举有效地映射到整数,甚至被隐式转换(或不进行转换),因此您可以使用枚举/数组组合执行类似的操作。

也许Dictionary<string, double>更适合您的情况?

还有一种解决方法:只需将85和80作为Enum值存储。输出期间除以10。这些技巧通常用于解决浮点精度问题。但这也可以在这里工作。

我个人觉得这属于“国际化”领域。 “ 8.5”或“ 8,5”只是显示该ShoeSize值的方式。对于枚举,我总是希望有一个要输出的值数组。

答案 3 :(得分:-3)

它使用命名常量。像这样

enum size : double
{
    Eight = 8, 
    EightAndOneHalf = 8.5
}