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不,这不是不同的参数。我说过你的解决方案为可能的有效输入提供了错误的值,你说你不在乎,因为问题中提供的一个例子是有效的,根据你的说法,这就是最重要的。问题要求为给定的三个字符串的组合提供给定的输出,而不是像您所做的那样为给定的单个字符串提供给定的输出。两者是不同的。您的解决方案无法回答所提出的问题。