here表示enum
的可能类型为byte
,sbyte
,short
,ushort
,int
},uint
,long
或ulong
。
如果我需要float
或double
来定义百分比增量,例如1.5
或2.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#,有一种方法可以解决一些问题吗?
答案 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;