这是一个使用非Integer作为枚举的好地方(违反通常的建议)吗?

时间:2014-08-08 20:40:03

标签: c# enums

我正在尝试设置一个枚举来固定钣金规(厚度)。现在我有:

using System.ComponentModel;
public enum Gauge
{
    [Description("24 Gauge")]
    G24 = 239,
    [Description("20 Gauge")]
    G20 = 359,
    [Description("18 Gauge")]
    G18 = 478,
    [Description("16 Gauge")]
    G16 = 598,
    [Description("14 Gauge")]
    G14 = 747
}

我的问题是:这似乎是打破不使用枚举背后的非整数类型规则的好地方吗?

真实世界的值类似于.0239,.0359,.0478等。浮点类型可能非常不可靠,但我正在考虑使用Decimal类型。它不是一个96位整数,后面的小数位移了吗?这应该是一个可靠的价值还是我只是在为这个想法遇到麻烦?

2 个答案:

答案 0 :(得分:2)

如果我理解你想要做什么,那么你可以使用隐式转换的类从/到双倍:

public class Gauge
{
    [Description("24 Gauge")]
    public const double G24 = 0.239;
    [Description("20 Gauge")]
    public const double G20 = 0.359;
    [Description("18 Gauge")]
    public const double G18 = 0.478;
    [Description("16 Gauge")]
    public const double G16 = 0.598;
    [Description("14 Gauge")]
    public const double G14 = 0.747;

    private double Value { get; set; }

    private Gauge(Double d)
    {
        Value = d;
    }

    public static implicit operator Double(Gauge g)
    {
        return g.Value;
    }

    public static implicit operator Gauge(Double d)
    {
        return new Gauge(d);
    }
}

你可以像这样使用它:

Gauge g = Gauge.G14;
g = 0.43;
//and so on, you can pass it as parameter to methods, etc

答案 1 :(得分:1)

枚举不允许使用.0239等值。

请参阅enum (C# Reference)

  

每个枚举类型都有一个基础类型,除了char之外,它可以是任何整数类型。

     

...

     

枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong。