繁体   English   中英

如何调试此错误:“无法将Lambda表达式转换为字符串”?

[英]How can I debug this error: “Cannot Convert Lambda Expression to String”?

我正在尝试调试以下代码,但无法正常工作。

我上传了这张图片http://i68.tinypic.com/2rqoaqc.jpg

这是我的代码:

using System;
using System.Text;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {   
         string input = "code1,code2,#c55+35+97#g,coden,code3,code4,#c44+25+07#gcoden";

         string output = Regex.Replace(
             input, 
             "#c(.*?)#g", 
             m => "#c" + m.Groups[1].Value.Split('+').Sum(int.Parse) + "#");

         Console.WriteLine(output);    
    }
}

这些是我得到的错误:

错误1:

'int int.Parse(string)'具有错误的返回类型(CS0407)-

错误2:

该调用在以下方法或属性之间是不明确的:'​​System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable,System.Func)'和'System.Linq.Enumerable.Sum(System.Collections.Generic.IEnumerable ,System.Func)'(CS0121)

错误3: -无法将m“ lambda”转换为字符串

无法将Lambda表达式转换为“字符串”类型,因为它不是委托类型(CS1660)

您需要使用显式lambda而不是int.Parse()

    string output = Regex.Replace(
        input,
        "#c(.*?)#g",
        m => "#c" + m.Groups[1].Value.Split('+').Sum(v => int.Parse(v)) + "#");

注意,我用v => int.Parse(v)替换了int.Parse 样品提琴

有趣的是,它可以按照c#6.0中的要求进行编译和工作:

    string output = Regex.Replace(
        input,
        "#c(.*?)#g",
        m => "#c" + m.Groups[1].Value.Split('+').Sum(int.Parse) + "#");

样品罗斯林小提琴 我不确定在哪里记录了此更改,也许在C#6的新语言功能:改进的重载分辨率下

对于重载分辨率有许多小的改进,这可能会导致更多的事情按照您期望的方式工作。 所有的改进都与“更好”有关–编译器决定两个重载中的哪个重载对于给定参数更好。

您可能会注意到这一点(或更确切地说,不再注意到问题!)的地方是在采用可空值类型的重载之间进行选择。 另一个是将方法组(而不是lambda)传递给期望委托的重载时。 详细信息不值得在此处进行扩展–仅想让您知道!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM