Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多返回案例的条件ifs_C#_Design Patterns - Fatal编程技术网

C# 多返回案例的条件ifs

C# 多返回案例的条件ifs,c#,design-patterns,C#,Design Patterns,我有以下条件:一个类和一个方法 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;

我有以下条件:一个类和一个方法

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个ifs来返回20个不同的组合,有没有什么方法可以消除多个条件而不必逐个执行?

我会:

或用于固定时间查找:

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}"];
字典查找=新字典
{
{“AbC”,“有效1”},
{“CAC”,“有效2”},
{“DTC”,“有效3”},
{“ABC”,“有效4”}
};
返回查找[$”{retor.v1}{retor.v2}{retor.v3}];
我想:

或用于固定时间查找:

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}"];
字典查找=新字典
{
{“AbC”,“有效1”},
{“CAC”,“有效2”},
{“DTC”,“有效3”},
{“ABC”,“有效4”}
};
返回查找[$”{retor.v1}{retor.v2}{retor.v3}];

您可以使用值字典元组和返回值:

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...
}
var映射=新字典
{
[(“A”、“b”、“C”)]=“有效1”,
// ...
};
if(mapping.TryGetValue((retor.v1、retor.v2、retor.v3)、out var结果)
{
返回结果;
}
其他的
{
//当没有匹配时。。。
}

您可以使用值字典元组和返回值:

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...
}
var映射=新字典
{
[(“A”、“b”、“C”)]=“有效1”,
// ...
};
if(mapping.TryGetValue((retor.v1、retor.v2、retor.v3)、out var结果)
{
返回结果;
}
其他的
{
//当没有匹配时。。。
}

静态字典添加(“AbC”,“valid1”),例如。连接输入字符串,然后返回查找结果由于您的问题也标记了设计模式,我建议您也阅读策略模式。在大多数情况下,简单的查找就足够了though@zzxyz这不能很好地处理空白值。@mjwills-是的,如果字符串不都是单字符值,那么连接字符串是个坏主意。我假设…静态字典添加(“AbC”,“valid1”),例如。连接输入字符串,然后返回查找结果由于您的问题也标记了设计模式,我建议您也阅读策略模式。在大多数情况下,简单的查找就足够了though@zzxyz这不能很好地处理空白值。@mjwills-是的,如果字符串不都是单字符值,那么连接字符串是个坏主意。我假设……只有当所有字符串都是单个字符时,这才有效,而实际数据中不一定是这种情况。@Servy如果我尝试为每种情况编写代码,我永远不会有足够的答案。我使用了OP提供的数据。字典方法可能会抛出
KeyNotFoundException
@TheIncorrigible1不,它不会。并非所有字符串的唯一组合在连接在一起时都会产生唯一的字符串。“AA”、“A”、“A”和“A”、“AA”、“A”都生成相同的连接字符串,尽管它们是不同的字符串集合。尽管是不同的字符串集合,但有无数这样的字符串集合组合产生相同的值。@不可更正1不,这不是不同的参数。我说过你的解决方案为可能的有效输入提供了错误的值,你说你不在乎,因为问题中提供的一个例子是有效的,根据你的说法,这就是最重要的。问题要求为给定的三个字符串的组合提供给定的输出,而不是像您所做的那样为给定的单个字符串提供给定的输出。两者是不同的。您的解决方案没有回答所问的问题。只有当所有字符串都是单个字符时,这才有效,而在实际数据中不一定是这样。@Servy如果我尝试为每种情况编写代码,我永远不会有足够的答案。我使用了OP提供的数据。字典方法可能会抛出
KeyNotFoundException
@TheIncorrigible1不,它不会。并非所有字符串的唯一组合在连接在一起时都会产生唯一的字符串。“AA”、“A”、“A”和“A”、“AA”、“A”都生成相同的连接字符串,尽管它们是不同的字符串集合。尽管是不同的字符串集合,但有无数这样的字符串集合组合产生相同的值。@不可更正1不,这不是不同的参数。我说过你的解决方案为可能的有效输入提供了错误的值,你说你不在乎,因为问题中提供的一个例子是有效的,根据你的说法,这就是最重要的。问题要求为给定的三个字符串的组合提供给定的输出,而不是像您所做的那样为给定的单个字符串提供给定的输出。两者是不同的。您的解决方案无法回答所提出的问题。