我需要用三元运算符替换多个 if 调用。我目前正在使用if条件根据 if 条件使用不同的参数调用相同的方法。我目前正在用10个if语句调用相同的方法,这使代码很长。我该如何利用三元运算符来克服这个问题?
代码如下:
if (item.AdditionalData.ContainsKey(a))
GetProjectComponent(item, Homeoffice, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(b))
GetProjectComponent(item, ProjectIndustry, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(c))
GetProjectComponent(item, ProjectCapability, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(d))
GetProjectComponent(item, ProjectTopic, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(e))
GetProjectComponent(item, ProjectTitle, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(f))
GetProjectComponent(item, ProjectCountry, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(g))
GetProjectComponent(item, ProjectState, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(h))
GetProjectComponent(item, ProjectContributors, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(i))
GetProjectComponent(item, ProjectList, rx, strNLSplitter);
if (item.fields.AdditionalData.ContainsKey(j))
GetProjectComponent(item, ProjectArea, rx, strNLSplitter);
答案 0 :(得分:3)
我不认为三元运算符会使它更清晰,因为有10个值可供选择,而不仅仅是2个值。但是您可以使用辅助方法来解析这些值。作为奖励,现在可以根据需要从其他地方调用它。
最终它仍然具有相同数量的if语句,但是现在它们与方法调用脱钩了。
public IEnumerable<SomeType> GetSpecialValues(ItemType item)
{
if (item.AdditionalData.ContainsKey(a)) yield return Homeoffice;
if (item.fields.AdditionalData.ContainsKey(b)) yield return ProjectIndustry;
if (item.fields.AdditionalData.ContainsKey(c)) yield return ProjectCapability;
if (item.fields.AdditionalData.ContainsKey(d)) yield return ProjectTopic;
// etc
}
// ...
foreach (var value in GetSpecialValues(item))
{
GetProjectComponent(item, value, rx, strNLSplitter);
}