C# 如何在c中以某种方式将枚举类型定义为float或double
它表示枚举的可能类型是byte、sbyte、short、ushort、int、uint、long或ulong 如果我需要一个浮点或双精度来定义百分比增量,例如1.5或2.5,该怎么办?我卡住了吗 正如这里所说: 枚举是具有一组静态常量的结构。理由 遵循此准则是因为您将获得一些额外的编译器 如果您定义枚举而不是手动定义 具有静态常数的结构 既然枚举是一组常量,为什么我不能有浮点常量 更新:这里说: 您知道CLR支持底层类型为float或double的枚举,即使大多数语言不选择公开它吗C# 如何在c中以某种方式将枚举类型定义为float或double,c#,enums,C#,Enums,它表示枚举的可能类型是byte、sbyte、short、ushort、int、uint、long或ulong 如果我需要一个浮点或双精度来定义百分比增量,例如1.5或2.5,该怎么办?我卡住了吗 正如这里所说: 枚举是具有一组静态常量的结构。理由 遵循此准则是因为您将获得一些额外的编译器 如果您定义枚举而不是手动定义 具有静态常数的结构 既然枚举是一组常量,为什么我不能有浮点常量 更新:这里说: 您知道CLR支持底层类型为float或double的枚举,即使大多数语言不选择公开它吗 由于我只使
由于我只使用c,有没有办法通过一些破解来做到这一点?您必须使用一组常量:
public const float Percentage1 = 1.5;
public const float Percentage2 = 2.5;
public const float A = 0.5;
public const float B = 17.62;
是的,你被困在那里了。不能将枚举与浮点类型一起使用。但是,您可以使用带有常量的静态类:
public static class MyFloatEnum {
public const float One = 1.0;
public const float OneAndAHalf = 1.5;
// etc.
}
而且从智能角度来看,它会有点接近。或者,您可能只想使用常量:
public const float Percentage1 = 1.5;
public const float Percentage2 = 2.5;
public const float A = 0.5;
public const float B = 17.62;
尽管CLR本身支持浮点枚举,但C设计人员选择不在语言see中公开它。您可以像John Saunders的答案中那样使用常量,也可以使用相乘的值定义一个整数枚举,然后在需要该值时将其除以
不过,这个用例肯定会很有趣。你为什么需要/想要这个?你想解决什么问题?你为什么需要这样做?如果你想要双常量,枚举不是正确的方法…枚举是一组常量,默认情况下它是整数常量,为什么我不能有浮点常量?@ChrisF-不确定问问题的人,但在我的情况下,我想要一个只接受数字0.0、0.25、0.5和0.75的函数。它们对应于北、东、南和西的方向。我想说明的是,它们应该按名称传递,并且隐藏它们有一个浮点值作为实现细节,用于函数内部的一些四元数数学。我想我会把它们设为整数0,1,2,3,然后在函数中将它们乘以0.25,但是…当有人要求一个功能,而其他用户回答你不需要的时候,这并不酷。只要抓住重点,回答是的,可能是这样,也可能不是,不可能。我需要一个枚举来记录不同城市的地球半径。这就是原因。还有无数这样的原因…我想定义一些非整数的固定增量百分比。谢谢链接。正如上面所说的,您知道CLR支持底层类型为float或double的枚举吗?即使大多数语言不选择公开它?因为我只使用c,有没有办法做到这一点?@user310291:没有,不幸的是,你被贴出的解决方法卡住了。不能使用C中的浮点枚举,我怀疑你是否真的想直接写IL只是为了拥有这个功能…你猜我不会直接写IL只是为了拥有这个功能,因为我不知道如何:是的,我可以定义一个静态类,但正如这里所说的,使用enum,如果你定义enum而不是手动定义enum,你将获得一些额外的编译器和反射支持使用静态常量定义结构。