我有一个枚举
public enum ProductionStatus {
Received = 000,
Validated = 010,
PlannedAndConverted = 020,
InProduction = 030,
QAChecked = 040,
Delivered = 070,
RejectedOrCancelled = 100
}
我需要通过此枚举的键获取值,例如,当选择ProductionStatus.Validated
时,它应该返回010.我该怎么做?
答案 0 :(得分:7)
只是在那里抛出另一个解决方案......
((int)ProductionStatus.Validated).ToString("D3");
答案 1 :(得分:4)
使用格式:
((int)ProductionStatus.Validated).ToString("000", CultureInfo.InvariantCulture);
这很简单,它会返回一个字符串。
如果您愿意,可以将其纳入扩展方法
public static class ProdStatusExtensions {
public static string (this ProductionStatus status) {
return ((int)status).ToString ("000", CultureInfo.InvariantCulture);
}
}
答案 2 :(得分:3)
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";
}
}
答案 3 :(得分:2)
var enumValues = Enum.GetValues(typeof(ProductionStatus)).Cast<object>()
.ToDictionary(enumValue => enumValue.ToString(), enumValue => (int)enumValue);
foreach (var enumValue in enumValues)
{
Console.WriteLine("item: {0}, value: {1}", enumValue.Key, enumValue.Value.ToString("000");
}
您可以从枚举中获取所有值和名称。
答案 4 :(得分:1)
一般来说,Enum Class包含一系列便于枚举工作的方法。
这里,如果要将可枚举值转换为整数或其他类型,可以写:
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”。
答案 5 :(得分:1)
这是通用帮助程序类,它将执行反向操作 - 从任何枚举获取键值:
public static class EnumHelpers {
public static T GetEnumObjectByValue<T>(int valueId) {
return (T) Enum.ToObject(typeof (T), valueId);
}
}
它就像这样 - 假设我们有 Enum :
public enum ShipmentStatus {
New = 0,
Shipped = 1,
Canceled = 2
}
因此,要获得枚举对象ShipmentStatus.Shipped
,这将返回此对象:
var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);
所以基本上你可以粘贴任何Enum对象并按值得到它:
var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);