当 myString 具有这些值A,B,C或D中的任何一个时,我希望执行以下代码。现在我知道我有这4个值,但在不久的将来我可以在这个集合中有更多的值。 我的代码:
var result = MyBlRepository.MyBLMethod(myString);
拥有n个if else循环的简单方法,但是当我有更多值时它会增长。处理这个问题的最佳方法是什么?哪种设计模式最适合它?
编辑:我不想在此处保留过滤器。我不想要修改这个文件的代码。
答案 0 :(得分:2)
如果您只是检查myString
是否具有一组常量值,您只需使用switch
:
bool result;
switch (myString) {
case "A":
case "B":
case "C":
case "D":
result = true;
break;
default:
result = false;
break;
}
请注意,这是此代码的特别长版本:
return true;
/ return false;
并省略break;
行。enum
类型可能更合适),则不需要{{1变量只是在result
情况下抛出异常(在默认情况下不再需要default
)。否则(如果在编译时尚未确定任何值),请按照break;
/ List<string>
的其他答案中描述的方式进行。
答案 1 :(得分:1)
var list = new List<string>
{
"A",
"B",
"C",
"D"
};
bool exists = list.Contains(myString);
答案 2 :(得分:1)
答案 3 :(得分:0)
我的建议是将Regex
与外部配置文件一起使用,您可以使用app.cofing
或custom xml file
您存储可能的值,例如expression = "^(A|B|C|D)$"
然后在你的程序中:
var expression = ReadFromConfigFile();
var regex = new Regex(expression);
if(regex.IsMatch(myString))
// do work