2008-11-20 11 views
17

tengo un poco de código que tiene este aspecto:¿cómo iba a pasar parámetros adicionales a MatchEvaluator

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

tengo que pasar en un segundo parámetro de la siguiente manera:

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

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

Respuesta

11

Lo siento, debería haber mencionado que estoy usando 2.0, por lo que no tienen 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 manera puedo crear un método "MiMetodo" y pasarlo lo parámetros que necesito (param1 y param2 son sólo para este ejemplo, no el código de hecho he usado) .

21

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 las expresiones lambda:

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

¡Muchas gracias! Me encanta esta respuesta –

Cuestiones relacionadas