喬那種打我給它,但這裏的做這件事的另一個非開關方式,基本上實現了規則集模式匹配算法。
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