2011-05-17 27 views
8

Simplemente encuentre la siguiente línea de código y le cueste encontrar documentación para ello, ¿es lambda expression? ¿Qué hace esto?¿Qué significa "Expresión Lambda"?

temp = Regex.Replace(url, REGEX_COOKIE_REPLACE,match => cookie.Values[match.Groups["CookieVar"].Value]); 

Específicamente interesado en el =>.

+0

Es [esta sobrecarga] (http://msdn.microsoft.com/en-us/library/ht1sxswy. aspx): eso es una lambda, sí, para especificar el [delegado de MatchEvaluator] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx). – Rup

Respuesta

9

Si nos fijamos en la documentación para reemplazar, la tercera es un argumento MatchEvaluator:

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx

Este es un delegado que toma un Match como un argumento y devuelve la cadena a sustituir. Su código es definir un MatchEvaluator usando una expresión lambda:

match => cookie.Values[match.Groups["CookieVar"].Value] 

Aquí, para cada partido que la expresión regular encuentra, un valor se está mirando en el diccionario cookie.Values y el resultado se utiliza como la sustitución.

7
match => cookie.Values[match.Groups["CookieVar"].Value] 

es un acceso directo a

delegate (Match match) 
{ 
    return cookie.Values[match.Groups["CookieVar"].Value]; 
} 
1

El RegEx.Replace corre el lambda para cada partido de REGEX_COOKIE_REPLACE en url y "sustituye" el partido con el resultado lambdas.

La lambda (o delegado abreviada)

match => cookie.Values[match.Groups["CookieVar"].Value] 

utiliza el Value de la "CookieVar" Group, del Match, para buscar un cambio en la colección cookie.Values. El valor de búsqueda reemplaza la coincidencia.

para brindarle más información acerca del grupo "CookieVar" tendríamos que ver una evaluación de REGEX_COOKIE_REPLACE.