2008-11-20 2 views
17

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

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

Мне нужно передать в 2-ой параметр, как это:

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

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

ответ

11

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

21

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

text = reg.Replace(text, match => MatchEvalStuff(match, otherData)); 
+0

спасибо! Мне нравится этот ответ – 2014-11-07 14:18:49

Смежные вопросы