这是将非整数用于Enum的好地方吗(与通常的建议相反)

本文关键字:整数 用于 好地方 Enum | 更新日期: 2023-09-27 18:17:16

我正试图建立一个enum来容纳钣金表(厚度)。现在我有:

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
}

我的问题是:这似乎是一个很好的地方打破规则,不使用非整型类型后面的enum?

真实世界的值如0.0239、0.0359、0.0478等。浮点类型可能非常不可靠,但我正在考虑使用Decimal类型。它不是一个96位的整数,小数点在后面移位了吗?这应该是一个可靠的值吗?还是我只是在自找麻烦?

这是将非整数用于Enum的好地方吗(与通常的建议相反)

如果我正确理解了你想做的事情,那么你可以使用一个从/到double的隐式转换的类:

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

不允许在枚举中使用.0239这样的值。

参见enum (c# Reference):

每个枚举类型都有一个基础类型,该基础类型可以是除char以外的任何整型。

允许的枚举类型有:byte、sbyte、short、ushort、int、uint、long、ulong。