Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中以某种方式将枚举类型定义为float或double_C#_Enums - Fatal编程技术网

C# 如何在c中以某种方式将枚举类型定义为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的枚举,即使大多数语言不选择公开它吗 由于我只使

它表示枚举的可能类型是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,你将获得一些额外的编译器和反射支持使用静态常量定义结构。