Тернарный оператор в C# с 3 условиями - PullRequest
0 голосов
/ 27 мая 2020

У меня есть сценарий, в котором у меня есть 3 условия, т.е.

Conditions table

Могу ли я записать эти условия с помощью одного тернарного оператора в C# ?. Я знаю, что для двух условий мы можем написать так:

string.Compare(SaveAsOption, "Comparison document", StringComparison.OrdinalIgnoreCase) == 0 ? .pdf : .docx;

Может ли кто-нибудь помочь мне в этом?

Ответы [ 3 ]

1 голос
/ 27 мая 2020

Могу ли я записать эти условия с помощью одного тернарного оператора в C#?

Ответ на это no .


Согласно вашему комментарию:

Когда я выбираю SaveAsOption как "Comparison document", тогда я получаю 2 варианта, чтобы выбрать один: .pdf, другой будет .wdf

Тогда вы действительно хотите использовать SaveAsOption как фильтр (поскольку этого недостаточно, чтобы определить, какой вариант выбрать), а нужен второе взаимодействие пользователя , если в отфильтрованном списке более 1 результирующего элемента

List<FileOption> availableOptions = new List<FileOption>
{
    new FileOption{Type = ".pdf", SaveAsOption = "Comparison document"},
    new FileOption{Type = ".wdf", SaveAsOption = "Comparison document"},
    new FileOption{Type = ".docx", SaveAsOption = "Word document with Track Changes"},
};

string strInput = "Comparison document";

var result = availableOptions
    // Filter the list
    .Where(o => o.SaveAsOption == strInput)
    .Select(o => o.Type)
    .ToList();

if(result.Count > 1)
    Console.WriteLine("Please choose an option: {0}", string.Join(" or ", result));
else if(result.Count == 1)
    Console.WriteLine("You chose {0}", result[0]);
else
    Console.WriteLine("There is no option for your selection");

Это отображает:

  • с strInput = "Comparison document":

    Пожалуйста, выберите вариант: .pdf или .wdf

  • с strInput = "Word document with Track Changes":

    Вы выбрали .docx

  • иначе:

    Вариантов для вашего выбора нет

0 голосов
/ 27 мая 2020

Попробуйте этот один- Вложенный троичный:

string.Compare(saveAs, "pdf", StringComparison.OrdinalIgnoreCase) == 0 ? ".pdf" : (string.Compare(saveAs, "wdf", StringComparison.OrdinalIgnoreCase) == 0? ".wdf":".docx");
0 голосов
/ 27 мая 2020

У вас 2 условия, из которых 2 непонятно что делать. Если бы на самом деле было 3 варианта, вы могли бы использовать тернарный оператор, switch, if ... else if. С тернарным:

string docType = saveAs.ToLower() == "comparison document"
      ? ".pdf" 
      : saveAs.ToLower() == "comparison document2": 
      ? ".wdf"
      : saveAs.ToLower() == "word document with track changes" 
      ? ".docx"
      : null;

Вероятно, лучшим способом было бы использовать структуру данных, такую ​​как словарь:

Dictionary<string, string> options = new Dictionary<string, string>()
{
    {"comparison document", ".pdf"},
    {"comparison document2",".wdf"},
    {"word document with track changes",".docx"},
};
options.TryGetValue(saveAs.ToLower(), out string docType);
Console.WriteLine(docType);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...