У меня есть код, который выглядит так:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));
Мне нужно передать второй параметр следующим образом:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));
Возможно ли это и как лучше всего это сделать?





MatchEvaluator является делегатом, поэтому вы не можете изменить его подпись. Вы можете создать делегата, который вызывает метод с дополнительным параметром. Это довольно просто сделать с помощью лямбда-выражений:
text = reg.Replace(text, match => MatchEvalStuff(match, otherData));
Альтернативный способ сделать это на основе этого решения text = Regex.Replace(text, @"some_pattern", new MatchEvaluator(match => MatchEvalStuff(match, otherData)));
Извините, я знаю, что это устарело, но есть ли шанс, что кто-то может расширить этот ответ с объявлением делегата, пожалуйста, я не могу об этом подумать?
Извините, я должен был упомянуть, что я использую 2.0, поэтому у меня нет доступа к лямбдам. Вот что я в итоге сделал:
private string MyMethod(Match match, bool param1, int param2)
{
//Do stuff here
}
Regex reg = new Regex(@"{regex goes here}", RegexOptions.IgnoreCase);
Content = reg.Replace(Content, new MatchEvaluator(delegate(Match match) { return MyMethod(match, false, 0); }));
Таким образом, я могу создать метод «MyMethod» и передать ему любые параметры, которые мне нужны (param1 и param2 предназначены только для этого примера, а не для кода, который я фактически использовал).
Большое спасибо вам! Мне нравится этот ответ