условные if для нескольких возвратов - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующее условие: класс и метод

public class ReturnParameter
   {
      public string v1 {get; set;} 
      public string v2 {get; set;} 
      public string v3 {get; set;} 
   }


  public string RideCombination(ReturnParameter retor)
  {
     var v1 =  retor.v1;
     var v2 =  retor.v2;
     var v3 =  retor.v3;


     // case 1
     if(v1 == "A" && v2 == "b" && v3 == "C" ) 
       return  "valid 1 "

     // case 2
     if(v1 == "C" && v2 == "A" && v3 == "C" ) 
       return  "valid 2 "

    // case 3
     if(v1 == "D" && v2 == "T" && v3 == "C" ) 
       return  "valid 3 "

   // case 4
     if(v1 == "A" && v2 == "B" && v3 == "C" ) 
       return  "valid 4 "

  }

Предположим, у меня есть 20 условий. У меня будет 20, если я верну 20 различных комбинаций. Есть ли способ, как я могу устранить несколько условий, не имеяделать по одному?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать словарь значений кортежа и возвращаемого значения:

var mapping = new Dictionary<(string, string, string), string>
{
    [("A", "b", "C")] = "valid 1",
    // ...
};

if (mapping.TryGetValue((retor.v1, retor.v2, retor.v3), out var result))
{
    return result;
}
else
{
    // when none match...
}
0 голосов
/ 26 сентября 2018

Я бы использовал оператор switch :

public string RideCombination(ReturnParameter retor)
{
    switch ($"{retor.v1}{retor.v2}{retor.v3}")
    {
        case "AbC":
            return "valid 1 ";
        case "CAC":
            return "valid 2 ";
        case "DTC":
            return "valid 3 ";
        case "ABC":
            return "valid 4 ";
        default:
            return "no match!";
    }
}

или Словарь для поиска в постоянном времени:

Dictionary<string, string> lookup = new Dictionary<string, string>
{
    { "AbC", "valid 1 "},
    { "CAC", "valid 2 "},
    { "DTC", "valid 3 "},
    { "ABC", "valid 4 "}
};
return lookup[$"{retor.v1}{retor.v2}{retor.v3}"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...