为了构建一个将所有可能的系统状态作为键和每个值为 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
}