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é).