我希望在myString具有这些值 A、B、C 或 D时执行以下代码。现在我知道我有这 4 个值,但在不久的将来我可以在这个集合中有更多的值。我的代码:
var result = MyBlRepository.MyBLMethod(myString);
拥有 n 个 if else 循环的简单方法,但当我有更多值时它会增长。处理这个问题的最佳方法是什么?哪种设计模式最适合它?
编辑:我不想在这里保留过滤器。我不想修改这个文件的代码。
我希望在myString具有这些值 A、B、C 或 D时执行以下代码。现在我知道我有这 4 个值,但在不久的将来我可以在这个集合中有更多的值。我的代码:
var result = MyBlRepository.MyBLMethod(myString);
拥有 n 个 if else 循环的简单方法,但当我有更多值时它会增长。处理这个问题的最佳方法是什么?哪种设计模式最适合它?
编辑:我不想在这里保留过滤器。我不想修改这个文件的代码。
如果您只是检查是否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
在这种情况下类型可能更合适),您不需要该result
变量,只需在这种default
情况下抛出异常(并且break;
在默认情况下不再需要)。否则(如果在编译时尚未确定任何值),请按照其他答案中描述的方式使用List<string>
/ HashSet<string>
。
var list = new List<string>
{
"A",
"B",
"C",
"D"
};
bool exists = list.Contains(myString);
我的 seggestion 是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