tutorial regulares pattern expresiones examples example c# matchevaluator

c# - regulares - ¿Cómo pasaría parámetros adicionales a MatchEvaluator?



regex.replace c# examples (2)

Tengo un código que se ve así:

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

Necesito pasar un segundo parámetro como este:

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

¿Es esto posible y cuál sería la mejor manera de hacerlo?


MatchEvaluator es un delegado, por lo que no puede cambiar su firma. Puede crear un delegado que llame a un método con un parámetro adicional. Esto es bastante fácil de hacer con expresiones lambda:

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


Lo siento, debería haber mencionado que estoy usando 2.0, por lo que no tengo acceso a lambdas. Esto es lo que terminé haciendo:

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); }));

De esta forma puedo crear un método "MyMethod" y pasarle los parámetros que necesito (param1 y param2 son solo para este ejemplo, no el código que realmente utilicé).