我正试图建立一个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位的整数,小数点在后面移位了吗?这应该是一个可靠的值吗?还是我只是在自找麻烦?
如果我正确理解了你想做的事情,那么你可以使用一个从/到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。