遍历Enum并检索EnumString

时间:2019-01-22 17:58:06

标签: c#

在尝试建立一个包含所有可能的系统状态作为键和每个值0的种子对象时,我有以下代码循环遍历包含系统状态信息的Enum:

            Dictionary<string, int> statusAccumulator = new Dictionary<string, int>();

            // initialize statusAccumulator with all possible system statuses
            foreach (var status in Enum.GetNames(typeof(SystemTaskRequestStatus)))
            {
                statusAccumulator[status] = 0;
            }

这是系统状态的枚举:

public enum SystemStatus
{
    [EnumString("PN")]
    Pending,
    [EnumString("RT")]
    Retry,
    [EnumString("IP")]
    InProgress,
    [EnumString("C")]
    Complete,
    [EnumString("F")]
    Failed,
    [EnumString("T")]
    Test
}

使用此代码,字典中的键为:待定,重试,进行中,完成,失败,测试。但是,我希望将EnumStrings作为键-PN,RT,IP,C,F,T。如何修改代码以实现此目的?

2 个答案:

答案 0 :(得分:0)

您不能执行Enum.GetValues(typeof(SystemStatus)),申请foreach,将每个项目强制转换回枚举,然后使用从属性中检索字符串的任何方法吗?

foreach (var status in Enum.GetValues(typeof(SystemStatus))
{
    string key = (SystemStatus)status.MethodThatRetrievesTheThingyFromProperty();
    statusAccumulator[key] = 0;
}

但是,为什么不希望将SystemStatus用作TKey并使用枚举实例本身来获取/设置值是有原因的?

Dictionary<SystemStatus, int> statusAccumulator = new Dictionary<SystemStatus, int>();

// initialize statusAccumulator with all possible system statuses
foreach (var status in Enum.GetValues(typeof(SystemStatus))
{
    statusAccumulator[(SystemStatus)status] = 0;
}

答案 1 :(得分:0)

尝试以此替换您的枚举代码,     public enum SystemStatus { [StringValue("PN")] PN = 1, [StringValue("RT")] RT = 2, [StringValue("IP")] IP = 3, [StringValue("C")] C = 4, [StringValue("F")] F = 5 [StringValue("T")] T = 6 }