编辑:大多数时候它工作正常,错误是异常的。
在调用此方法的行上,错误报告说它抛出了一个 KeyNotFoundException“我将枚举映射到字符串(!我在声明时没有以任何方式更新字典!):
public Task<bool> UpdateStatusAsync(Some object, Status status)
{
var somerequest = new Somerequest
{
...
Status = MapDomainStatusToAclStatus(status.Type),
...
};
.............
}
这是映射函数:
private string MapDomainStatusToAclStatus(DomainStatus domainStatus)
{
if (DictionaryDomainACLStatus.ContainsKey(domainStatus))
{
return DictionaryDomainACLStatus[domainStatus];
}
// Some refactor todo comment.
switch (domainStatus)
{
case DomainStatus.Aborted:
return "Some string";
}
Log.Info($"[MapDomainStatusToAclStatus] DomainStatus={domainStatus} cant be mapped to ACL status");
return String.Empty;
}
这甚至可能吗?
编辑:
因为我收到了一些关于可能的竞争条件的回复,所以我想补充一点,字典是这样声明的:
public static readonly Dictionary<DomainStatus, string> { values }
Edit2:我的字典声明:
public static readonly Dictionary<DomainStatus, string> DictionaryDomainACLStatus= new Dictionary<DomainStatus, string>
{
{DomainStatus.Approved, "TEXT" },
{DomainStatus.Declined, "TEXT2" }
};
稍后在代码中不会发生创建更新删除操作。