You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#正则替换用匿名方法报错:无法将匿名方法转换为int类型

解决正则替换中匿名方法报错的问题

嘿,这个错误我太熟啦!你之所以收到cannot convert anonymous method to type int because it's not a delegate type的提示,核心原因是调用了错误的Regex.Replace重载版本。

错误根源

Regex.Replace有好几个重载方法,其中一个是接受int类型的「替换次数」参数,但你把匿名方法传进了本该放数字的位置,编译器自然转不过来——它总不能把一段代码当成整数吧?

另外还有一种可能:你的匿名方法签名不符合MatchEvaluator委托的要求(这个委托是正则替换用来处理每个匹配项的标准委托),导致编译器找不到合适的重载,只能硬着头皮尝试匹配需要int的版本,结果就报错了。

正确的实现方式

MatchEvaluator委托的要求很明确:接受一个Match对象作为参数,返回string类型的替换结果。我们只要按照这个规则写匿名方法,再调用对应的重载就行,顺便还要处理Z/z循环回A/a的边界情况:

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        string input = "hello world!";
        // 调用接受MatchEvaluator的Replace重载
        string result = Regex.Replace(input, @"[a-zA-Z]", match => 
        {
            char original = match.Value[0];
            // 处理Z/z的循环逻辑
            char nextChar = original switch
            {
                'Z' => 'A',
                'z' => 'a',
                _ => (char)(original + 1)
            };
            return nextChar.ToString();
        });

        Console.WriteLine(result); // 输出:ifmmp xpsme!
    }
}

关键细节提醒

  • 正则表达式@"[a-zA-Z]"确保只处理字母字符,避免把空格、标点这类非字母也转成奇怪的字符;
  • 一定要让匿名方法接受Match参数(就是代码里的match),不然编译器还是会匹配错误的重载;
  • 别忘处理Z和z,不然它们会变成[和{这类非字母字符,不符合需求。

内容的提问来源于stack exchange,提问作者SomethingClever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:03:56