C#中=>运算符的工作原理及代码中变量m的由来
关于C#中
=>运算符的工作原理及代码中变量m的产生说明 一、=>运算符的工作原理
在C#中,=>被称为lambda运算符,用于定义lambda表达式——一种简洁的匿名函数写法,核心作用是快速创建可传递的函数逻辑,语法分为两种形式:
- 表达式体形式:
(参数列表) => 表达式,右边的表达式会直接作为函数的返回值,适合逻辑简单的场景,你代码里用到的就是这种。 - 语句块形式:
(参数列表) => { 语句1; 语句2; return 返回值; },用大括号包裹多条执行语句,需要显式通过return指定返回结果。
举个基础例子:int Add(int a, int b) => a + b; 这是用lambda表达式作为方法的表达式体,和常规方法写法等价;再比如List<int> nums = new List<int>{1,2,3}; var doubled = nums.Select(x => x * 2); 这里的x => x*2就是传递给Select方法的匿名函数,接收集合里的每个元素x,返回它的2倍值。
二、代码中变量m的产生逻辑
先看完整代码片段:
using System; using System.Text.RegularExpressions; public class Test { public static void Main() { var line = "Keeping the line intact, replace me, but not you, keep this too.\n\nRetaining me, replace one, but not two, ignore three."; var res = Regex.Replace(line, @"replace (?<target>.*), but not (?<source>.*),", m => "replace " + m.Groups["source"].Value.Replace("o", "1") + ", but not " + m.Groups["source"].Value + ","); Console.WriteLine(res); } }
这里的m是lambda表达式的参数,它的产生和Regex.Replace方法的工作机制直接相关:
Regex.Replace有一个重载,第三个参数是MatchEvaluator类型的委托,这个委托的定义是public delegate string MatchEvaluator(Match match)——也就是说,它需要一个能接收Match类型参数、返回字符串的函数。- 代码里的
m => ...就是这个委托的lambda实现,m是我们给这个委托参数起的名字,它的实际类型是Match。 - 当
Regex.Replace遍历输入字符串,每找到一个符合正则表达式的匹配项时,会自动创建一个Match对象,这个对象包含了当前匹配的所有信息(比如整个匹配文本、分组内容等),然后把这个对象作为参数传给我们定义的lambda表达式,也就是代码里的m。 - 我们可以通过
m访问匹配的细节,比如代码里的m.Groups["source"].Value就是获取正则表达式中命名为source的分组对应的文本内容。
内容的提问来源于stack exchange,提问作者Pavel Stepanek
相关产品推荐
相关产品推荐

