这是有效的:
public enum Size
{
Eight,
EightAndOneHalf
};
但是如何在C#枚举中使用数字,如下所示?可能吗还是代表这种结构的首选方法?
public enum Size
{
8,
8.5
};
答案 0 :(得分:2)
您可以使用结构:
public struct Size
{
public const double Eight = 8;
public const double EightPointFive = 8.5;
public const double Nine = 9;
// Add Remaining units / values
}
然后可以像这样使用:
double size = Size.Eight;
或者可以这样做:
enum Size {
Eight, EightPointFive, Nine
}
然后使用如下函数:
public float GetSize(Size size)
{
switch (size)
{
case Size.Eight :
return 8;
case Size.EightPointFive :
return 8.5;
// rest of the sizes.
default: return -1;
}
//unhandled
return -1;
}
答案 1 :(得分:1)
如果您将其命名为常量,则可以创建如下内容:
public static class Size
{
public const double Eight = 8.0;
public const double EightAndOneHalf = 8.5;
}
然后您将使用它:
var mySize = Size.EightAndOneHalf;
但是,您无法枚举“假”枚举,因此,如果要执行此操作,则必须添加类似以下内容:
public static class Size
{
public const double Eight = 8.0;
public const double EightAndOneHalf = 8.5;
public static IEnumerable<double> All = new double[] { Eight, EightAndOneHalf };
}
然后您可以执行以下操作:
foreach(var size in Size.All)
{
// code here
}
此基本思想用于框架本身。例如:https://github.com/aspnet/Identity/blob/master/src/Identity/IdentityConstants.cs
答案 2 :(得分:0)
在它们的核心,枚举仅次于编译时间常数,它们被分组,从而获得某种类型的安全性。它既具有自定义类型的优点,也只是用于处理的数字和在代码中使用常量的优点。
Enums的默认类型是整数之一,默认值从0开始,向上计数。虽然类型和值可以覆盖,但不能随意更改。 必须是整数。
由于枚举有效地映射到整数,甚至被隐式转换(或不进行转换),因此您可以使用枚举/数组组合执行类似的操作。
也许Dictionary<string, double>
更适合您的情况?
还有一种解决方法:只需将85和80作为Enum值存储。输出期间除以10。这些技巧通常用于解决浮点精度问题。但这也可以在这里工作。
我个人觉得这属于“国际化”领域。 “ 8.5”或“ 8,5”只是显示该ShoeSize值的方式。对于枚举,我总是希望有一个要输出的值数组。
答案 3 :(得分:-3)
它使用命名常量。像这样
enum size : double
{
Eight = 8,
EightAndOneHalf = 8.5
}