Как передать дополнительные параметры в MatchEvaluator
У меня есть немного кода, который выглядит так:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));
Мне нужно передать второй параметр следующим образом:
text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));
Возможно ли это, и что было бы лучшим способом сделать это?
Ответы
Ответ 1
Извините, я должен был упомянуть, что я использую 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 предназначены только для этого примера, а не для кода, который я действительно использовал).
Ответ 2
MatchEvaluator является делегатом, поэтому вы не можете изменить его подпись. Вы можете создать делегат, который вызывает метод с дополнительным параметром. Это довольно легко сделать с лямбда-выражениями:
text = reg.Replace(text, match => MatchEvalStuff(match, otherData));