Джо вроде бил меня к нему, но вот еще не отбой способ сделать это, который по существу реализует шаблон, соответствующий алгоритм с набором правил.
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";
}
Преимущества
- Если вам нужно новое правило, легко добавить к набору правил.
- Если вам нужна новая функция сопоставления рисунка, снова легко добавить.
- Не требуется обширная переделка, если правило изменяется.
Недостатки
- Novice/начальный и даже некоторые промежуточные разработчики могут не иметь ни малейшего понятия, что происходит.
Улучшение
- Заменить
Tuple<string, string, Func<string, string, bool>>
с семантическим объектом, который представляет собой Rule
Вам нужно будет использовать if/else. – adv12
Предположим, вы все равно можете использовать переключатель для всех других значений и поместить код StartsWith в случай по умолчанию ... – adv12