Как передать в MatchEvaluator доп.параметры. Сейчас я использую статические переменные для передачи, но как-то это некрасиво
using System.Text.RegularExpressions;
...
//Наш подстановщик MatchEvaluator
protected static string ReplaceForDisplayString(System.Text.RegularExpressions.Match m)
{
//Что-то что использует передаваемый параметр
}
//Основной код
string pattern = @"\{([0-9]{1,}|[P]{1})\}";//Паттерн не важен, он может быть и другим
Regex rgx = new Regex(pattern);
//Тут запускаем подстановщик по регулярке,
//однако в подстановщик нужно передать параметр,
//который будет там использоваться
string newStr = rgx.Replace(str, new MatchEvaluator(ReplaceForDisplayString));
UPD: сейчас у меня что-то типа:
using System.Text.RegularExpressions;
...
//Вот это параметр я передаю как-то по топорному
protected static object parameter = null;
protected static string ReplaceForDisplayString(System.Text.RegularExpressions.Match m)
{
//Тут я его как-то использую
return parameter.ToString();
}
string pattern = @"\{([0-9]{1,}|[P]{1})\}";//Паттерн не важен, он может быть и другим
Regex rgx = new Regex(pattern);
parameter = "abcd";
string newStr = rgx.Replace(str, new MatchEvaluator(ReplaceForDisplayString));
Как насчет?
protected static string ReplaceForDisplayString(Match m, string parameter)
{
return parameter.ToString();
}
string pattern = @"\{([0-9]{1,}|[P]{1})\}";
Regex rgx = new Regex(pattern);
string newStr = rgx.Replace(str, m => ReplaceForDisplayString(m, "abcd"));
Как верно заметил Grundy - new MatchEvaluator() можно опустить.
Подробнее про лямбда-выражения.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники