在C#中使用带三元运算符的if语句替换多个方法调用

时间:2018-08-24 12:21:04

标签: c# asp.net .net ternary-operator

我需要用三元运算符替换多个 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);

1 个答案:

答案 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);
}