C# 如何调试此错误:“quot;无法将Lambda表达式转换为字符串";?
我试图调试以下代码,但它不起作用 我上传这张照片 这是我的代码:C# 如何调试此错误:“quot;无法将Lambda表达式转换为字符串";?,c#,C#,我试图调试以下代码,但它不起作用 我上传这张照片 这是我的代码: 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,code
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.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表达式转换为类型“string”,因为它不是委托类型(CS1660)
您需要使用显式lambda,而不是
int.Parse()
:
注意,我将int.Parse
替换为v=>int.Parse(v)
。样品
有趣的是,它按照c#6.0中的要求编译和工作:
样品。我不确定该变更记录在何处,可能记录在:
过载解决方案有许多小的改进,这
可能会导致更多的事情按照你期望的方式进行
让他们去。这些改进都与“更好”有关——即
编译器决定两个重载中哪一个对于给定的
争论
一个你可能会注意到这一点的地方(或者更确切地说,停止注意一个问题)
问题!)是在选择接受可为空值的重载时
类型。另一种是在传递方法组时(与lambda相反)
以重载期望的委托。细节不值得详述
在这里–只是想让你知道
请将所有错误消息复制到问题中。
**m**
是您试图在代码中突出显示m
,还是实际代码?是我建议您在。您没有传入正确类型的参数。正如错误所说,它需要的是一个字符串,而不是lambda表达式。@dbc我在错误3中留下了m
,因为我觉得这样可以更清楚地显示错误所指的lambda和lambda行。我认为它不应该被删掉。该语句可能应该使用m
重新措辞,或者应该完全删除整个句子,因为它目前没有向其正下方的错误语句添加任何额外信息。
string output = Regex.Replace(
input,
"#c(.*?)#g",
m => "#c" + m.Groups[1].Value.Split('+').Sum(v => int.Parse(v)) + "#");
string output = Regex.Replace(
input,
"#c(.*?)#g",
m => "#c" + m.Groups[1].Value.Split('+').Sum(int.Parse) + "#");