如何在c#中以某种方式将枚举类型定义为float或double

时间:2011-12-03 21:50:58

标签: c# enums

here表示enum的可能类型为bytesbyteshortushortint },uintlongulong

如果我需要floatdouble来定义百分比增量,例如1.52.5,该怎么办?我被困了吗?

如上所述: http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design

  

枚举是一种具有一组静态常量的结构。原因   遵循此指南是因为您将获得一些额外的编译器   如果定义枚举与手动定义,则支持反射   具有静态常量的结构。

由于枚举是一组常量,为什么我不能有浮点常量?

更新:这里说: http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design “你知道CLR支持带有基础类型的float或double的枚举,即使大多数语言不选择暴露它吗?”

由于我只使用c#,有一种方法可以解决一些问题吗?

3 个答案:

答案 0 :(得分:6)

是的,你被困在那里。您不能将enum用于浮点类型。但是,您可以使用static class和常量:

public static class MyFloatEnum {
    public const float One = 1.0;
    public const float OneAndAHalf = 1.5;
    // etc.
}

在IntelliSense中看起来会有点接近。或者,您可能只想使用常量:

public const float A = 0.5;
public const float B = 17.62;

答案 1 :(得分:4)

虽然CLR本身支持浮点枚举,但C#设计者选择不在语言中公开它(参见http://en.csharp-online.net/.NET_Type_Design_Guidelines%E2%80%94Enum_Design)。你可以像在约翰·桑德斯的回答中那样使用常量,也可以用乘法值定义一个整数枚举,然后在需要该值时将它们分开。

但是用例肯定会很有趣。你为什么需要/想要这个?

答案 2 :(得分:3)

您必须使用一组常量:

public const float Percentage1 = 1.5;
public const float Percentage2 = 2.5;