C# 需要在c中创建类型为double的枚举#
如何创建double类型的枚举C# 需要在c中创建类型为double的枚举#,c#,enumeration,C#,Enumeration,如何创建double类型的枚举 是否可能或必须创建某种集合和散列?枚举类型必须是类型,除了char。这不包括double,因此您需要创建一个查找表或一组常量。您不能将其设置为枚举 一种可能性: public static class MyPseudoEnum { public static readonly double FirstVal = 0.3; public static readonly double SecondVal = 0.5; } 我认为byte、sbyte
是否可能或必须创建某种集合和散列?枚举类型必须是类型,除了
char
。这不包括double,因此您需要创建一个查找表或一组常量。您不能将其设置为枚举
一种可能性:
public static class MyPseudoEnum
{
public static readonly double FirstVal = 0.3;
public static readonly double SecondVal = 0.5;
}
我认为byte、sbyte、short、ushort、int、uint、long或ulong是您唯一的选择
为什么,出于兴趣?也许我们可以解决这个问题。枚举不能使用double。有关枚举如何工作的说明,请参阅以下MSDN文章: 以下是文章中的一段话,回答了您的问题: 每个枚举类型都有一个基础类型,它可以是除char之外的任何整数类型。枚举元素的默认基础类型是int
不,枚举本质上是整数值 我不知道你正在解决的具体问题,但你可以编一本通用词典
当然,双打的比较总是很有趣的,特别是当它们在小数点处相差很远的时候。如果您尝试将计算结果(相等)与已知的双精度进行比较,可能会很有趣。只是一个警告,如果这是你可能需要做的 我想这取决于你想找多少麻烦。可以将double转换为long,因此,如果在单独的程序中将double值转换为long整数,并输出常量值,则可以在程序中使用它们 顺便说一句,我强烈反对这样做,但有时候你必须做你必须做的事 首先,编写一个程序将双精度转换为长精度:
Console.WriteLine("private const long x1 = 0x{0:X16}L;",
BitConverter.DoubleToInt64Bits(0.5));
Console.WriteLine("private const long x2 = 0x{0:X16}L;",
BitConverter.DoubleToInt64Bits(3.14));
现在,将该输出添加到程序并创建枚举:
private const long x1 = 0x3FE0000000000000L;
private const long x2 = 0x40091EB851EB851FL;
enum MyEnum : long
{
val1 = x1,
val2 = x2
}
如果要针对枚举测试双精度值,则必须调用
位转换器.DoubleToInt64Bits()
,并将结果强制转换为枚举类型。要以另一种方式进行转换,请调用BitConverter.Int64BitsToDouble()
为什么需要使用类型为double的枚举
如果您需要子值,您可以将双精度值与常量运算符相乘,将它们全部转换为整数(并保持相同的比率),然后使用相同的运算符将值转换回双精度值。。。如果乘以几十,就好像将十进制分隔符暂时向左移动一样。简单但有效。这不会编译。您建议的字段应该是
静态
或常量
。为什么选择静态
而不是常量
?字符是一个整数值(例如,在大多数ASCII编码中是一个字节)@AZ,tvanfosson所说的是,尽管char是一种整数类型,但它不能用作枚举的基础类型。或者,您可以在枚举旁边创建一个具有所需值的简单数组。然后使用枚举的int值来寻址正确的值。