Подтвердить что ты не робот

Как передать дополнительные параметры в MatchEvaluator

У меня есть немного кода, который выглядит так:

text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff));

Мне нужно передать второй параметр следующим образом:

text = reg.Replace(text, new MatchEvaluator(MatchEvalStuff, otherData));

Возможно ли это, и что было бы лучшим способом сделать это?

4b9b3361

Ответ 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));