Замените несколько вызовов методов, используя оператор if с тернарным оператором в C # - PullRequest
0 голосов
/ 24 августа 2018

Мне нужно заменить несколько , если , вызовами на троичные операторы. В настоящее время я использую условия 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 голосов
/ 24 августа 2018

Я не думаю, что троичный оператор сделает его более понятным, потому что есть 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);
}
...