乔那种打我给它,但这里的做这件事的另一个非开关方式,基本上实现了规则集模式匹配算法。
private static string GetSomeStringOrOther(string subArea)
{
// Create a set of pattern matching functions...
Func<string, string, bool> matchEquals = (a, b) => a.Equals(b);
Func<string, string, bool> matchStarts = (a, b) => a.StartsWith(b);
// Create a rule set...
Tuple<string, string, Func<string, string, bool>>[] cases = new []
{
new Tuple<string, string, Func<string, string, bool>>("4100", "ABC", matchEquals),
new Tuple<string, string, Func<string, string, bool>>("4101", "ABC", matchEquals),
new Tuple<string, string, Func<string, string, bool>>("4102", "ABC", matchEquals),
new Tuple<string, string, Func<string, string, bool>>("4200", "ABC", matchEquals),
new Tuple<string, string, Func<string, string, bool>>("600A", "XWZ", matchEquals),
new Tuple<string, string, Func<string, string, bool>>("3*", "123", matchStarts),
new Tuple<string, string, Func<string, string, bool>>("03*", "123", matchStarts),
};
// Look for a match...
foreach(var matchCase in cases)
{
if(matchCase.Item3(subArea, matchCase.Item1))
{
// Return if it matches...
return matchCase.Item2;
}
}
// Otherwise return the default...
return "ABCXYZ123";
}
优势
- 如果你需要一个新的规则,可以很容易地添加到规则集。
- 如果您需要新的模式匹配功能,再次轻松添加。
- 如果规则更改,则不需要大量返工。
缺点
- 新手/初学者,甚至一些中间开发商可能没有一个线索是怎么回事。
改进
您需要使用if/else。 – adv12
我想你仍然可以使用开关的所有其他值,并把默认情况下的StartsWith代码... – adv12