bool IsMatch(string someString)
{
var patterns = new[]
{
"someExpr1",
"someExpr2",
"someExpr3"
};
return patterns.Any(pattern => Regex.IsMatch(someString, pattern));
}
Читабельнее чем case или if, сразу видно по каким pattern`ам ищутся совпадения.
Any не будет проверять все patterns, выйдет при первом найденном и вернёт true
А чтобы сделать так, как вы ходите, вот оно:
var someStr = "someValue";
switch (true)
{
case Regex.IsMatch(someStr, "somePattern1")
// do...
break;
case Regex.IsMatch(someStr, "somePattern2")
// do...
break;
case Regex.IsMatch(someStr, "somePattern3")
// do...
break;
}
Это будет, предположительно, работать с C#7, который ещё не вышел.
Для вашего случая можете попробовать что-то такое
void Main()
{
var fileNameList = new List<string> { "fileNameOne", "fileNameTwo" };
foreach (var fileName in fileNameList)
{
var fileAction = FileActions.FirstOrDefault(x => Regex.IsMatch(fileName, x.Key));
if (fileAction.Key != null)
fileAction.Value(fileName);
}
}
IDictionary<string, Action<string>> FileActions = new Dictionary<string, Action<string>>
{
{ "somePatternOne", SomeActionOne },
{ "somePatternTwo", SomeActionTwo }
};
void SomeActionOne(string fileName) { /* Do... */ }
void SomeActionTwo(string fileName) { /* Do... */ }
Если код парсинга для каждого файла значительно отличается и кода много, вместо методов можно использовать классы (полиформизм)