繁体   English   中英

从c#枚举中获取价值

[英]get value from 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<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");
}

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

通常,有一个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<T>(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<ShipmentStatus>(1);

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

var enumObject = EnumHelpers.GetEnumObjectByValue<YOUR_ENUM_TYPE>(VALUE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM