7

我有一个枚举

public enum ProductionStatus {
    Received = 000,
    Validated = 010,
    PlannedAndConverted = 020,
    InProduction = 030,
    QAChecked = 040,
    Delivered = 070,
    RejectedOrCancelled = 100
}

我需要从这个枚举中按键获取值,例如选择ProductionStatus.Validated它时应该返回 010。我该怎么做?

4

6 回答 6

7

只是为了在那里抛出另一个解决方案......

((int)ProductionStatus.Validated).ToString("D3");
于 2013-02-22T08:56:58.603 回答
4
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";
        }
    }
于 2013-02-22T08:34:19.480 回答
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);
    }
}
于 2013-02-22T08:45:51.110 回答
3
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");
}

您可以像这样从枚举中获取所有值和名称。

于 2013-02-22T08:38:59.350 回答
1

一般来说,有一个Enum 类,其中包含一组方法,便于使用枚举。

在这里,如果您想将可枚举值转换为整数或其他类型,您可以编写:

int validatedAsInt = (int) ProductionStatus.Validated

validateAsInt 将包含 ProductionStatus.Validated 的值。

如果你想获得像“010”这样的数字,你可以写:

string validatedAsString = ((int) ProductionStatus.Validated).ToString("000");

或者:

string validatedAsString = ((int) ProductionStatus.Validated).ToString("D3");

已验证的AsString将包含“010”。

于 2013-02-22T08:39:58.863 回答
1

这是将执行反向操作的通用助手类 - 从 ANY Enum按值获取键:

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
}

因此,要获取Enum对象,ShipmentStatus.Shipped这将返回此对象:

var enumObject = EnumHelpers.GetEnumObjectByValue<ShipmentStatus>(1);

所以基本上你可以粘贴任何 Enum 对象并按值获取它:

var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);
于 2013-05-09T14:19:22.600 回答