Как бы я передать дополнительные параметры в MatchEvaluator - PullRequest
21 голосов
/ 20 ноября 2008

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

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

Мне нужно передать второй параметр, подобный этому:

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

Возможно ли это, и как лучше всего это сделать?

Ответы [ 2 ]

25 голосов
/ 20 ноября 2008

MatchEvaluator является делегатом, поэтому вы не можете изменить его подпись. Вы можете создать делегат, который вызывает метод с дополнительным параметром. Это довольно легко сделать с помощью лямбда-выражений:

text = reg.Replace(text, match => MatchEvalStuff(match, otherData));
13 голосов
/ 20 ноября 2008

Извините, я должен был упомянуть, что использую 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 только для этого примера, а не код, который я на самом деле использовал).

...