遍历枚举并检索枚举字符串



为了构建一个将所有可能的系统状态作为键和每个值为 0 的 Dictionary 对象,我有以下代码循环遍历包含系统状态信息的枚举:

            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
}

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

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

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;
}

尝试用这个替换你的枚举代码, 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 }

最新更新