你能为Double变量使用Enum吗
本文关键字:Enum 变量 Double | 更新日期: 2023-09-27 17:58:18
我在C#中创建了一个用于处理单元转换的类。它不起作用,因为它应该只返回字符串。
这是类别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace RestaurantManagementSystem
{
class unitHandler
{
public enum Units
{
Grams = 1,
KiloGrams = 0.001,
Milligram = 1000,
Pounds = 0.00220462,
Ounces = 0.035274,
Tonnes = 0.000001,
Litres = 1,
Millilitres = 1000,
Cups = 4.22675,
FluidOunces = 33.814,
TeaSpoon = 202.884,
TableSpoon = 67.628,
CubicFeet = 0.0353147,
CubicInch = 61.0237,
CubicCentimetres = 0.0001,
CubicMetres = 0.001
}
public double Convert_Value(Units from, Units to, double quantity)
{
double converted_quantity = 0;
double fromValue = quantity * Convert.ToDouble(from.ToString());
converted_quantity = fromValue * Convert.ToDouble(to.ToString());
return converted_quantity;
}
}
}
我希望枚举类型包含每个单位的转换因子的双值,然后使用它们进行转换并返回转换后的数量。
否,枚举的默认类型是int
或long
,不能与之一起使用小数。您可以使用枚举的结构或类内部来进行双重
public struct Units
{
public const double Grams = 1;
public const double KiloGrams = 0.001;
public const double Milligram = 1000;
public const double Pounds = 0.00220462;
public const double Ounces = 0.035274;
public const double Tonnes = 0.000001;
// Add Remaining units / values
}
像一样使用
double d = Units.KiloGrams;
否:
我试着把这个交给Visual Studio:
public enum Test : double
{
Hello, World
}
上面写着:
键入所需的字节、sbyte、short、ushort、int、uint、long或ulong
您不能将float/double与枚举一起使用。您可能需要定义常量。
public const double KiloGrams = 0.001;
对不起,无法完成。枚举严格来说是整数/字节。真的,他们应该是自己的类型。
你可以试试:
enum Units() {
Grams ,
KiloGrams ,
Milligram
}
public function GetUnitsFloatValue(Units unit) : float
{
switch (unit)
{
case Units.Grams :
return 1;
case Units.KiloGrams :
return 0.001;
case Units.MilliGrams:
return 1000;
}
//unhandled unit?
return 0;
}
您可以先使用BitConverter.DoubleToInt64Bits(double)
方法将double
转换为long
,然后将它们硬编码为支持long
类型的枚举。然后,您必须将枚举值转换回double
。
这可能比它的价值更麻烦。
不能将enum与doubles一起使用。您只能将其与int
和long
一起使用