在尝试建立一个包含所有可能的系统状态作为键和每个值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。如何修改代码以实现此目的?
答案 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
}