从c#enums中获取价值
我有一个枚举
public enum ProductionStatus { Received = 000, Validated = 010, PlannedAndConverted = 020, InProduction = 030, QAChecked = 040, Delivered = 070, RejectedOrCancelled = 100 }
我需要从这个枚举中获取键值,例如选择ProductionStatus.Validated
它应该返回010.我该怎么做?
只是在那里抛出另一个解决方案……
((int)ProductionStatus.Validated).ToString("D3");
使用格式:
((int)ProductionStatus.Validated).ToString("000", CultureInfo.InvariantCulture);
这很简单,它返回一个字符串。
如果您愿意,可以将其纳入扩展方法
public static class ProdStatusExtensions { public static string (this ProductionStatus status) { return ((int)status).ToString ("000", CultureInfo.InvariantCulture); } }
var code = (int)ProductionStatus.Validated;
您还可以将int转换为枚举值,如下所示:
var status = (ProductionStatus)10;
bool eq = 010 == 10;
他们实际上是平等的
如果您想使用字符串,请使用此方法。
static string EnumToString(ProductionStatus val) { switch (val) { case ProductionStatus.Received: return "000"; case ProductionStatus.Validated: return "010"; case ProductionStatus.PlannedAndConverted: return "020"; default: return "Unknown value"; } }
var enumValues = Enum.GetValues(typeof(ProductionStatus)).Cast
您可以从枚举中获取所有值和名称。
通常,有一个Enum类 ,它包含一系列方法,便于使用枚举。
在这里,如果要将可枚举值转换为整数或其他类型,可以编写:
int validatedAsInt = (int) ProductionStatus.Validated
validatedAsInt将包含ProductionStatus.Validated的值。
如果你想获得像“010”这样的数字你可以写:
string validatedAsString = ((int) ProductionStatus.Validated).ToString("000");
要么:
string validatedAsString = ((int) ProductionStatus.Validated).ToString("D3");
validatedAsString将包含“010”。
这是通用助手类,它将执行反向操作 – 从任何枚举中获取值:
public static class EnumHelpers { public static T GetEnumObjectByValue(int valueId) { return (T) Enum.ToObject(typeof (T), valueId); } }
它就像这样 – 假设我们有这个枚举 :
public enum ShipmentStatus { New = 0, Shipped = 1, Canceled = 2 }
因此,要获取Enum对象ShipmentStatus.Shipped
这将返回此对象:
var enumObject = EnumHelpers.GetEnumObjectByValue(1);
所以基本上你可以粘贴任何Enum对象并按值获取它:
var enumObject = EnumHelpers.GetEnumObjectByValue(VALUE);