尝试反转字符串但在聚合函数中出错
private string Reverse(string strValue)
{
char[] chArray = strValue.ToCharArray();
var reverse = chArray.Reverse();
var res = reverse.Aggregate((a,b)=>a+b);
return res.ToString();
}
无法将类型'int'隐式转换为'char'。存在显式转换(您是否错过了演员?) 那是什么错误?
答案 0 :(得分:6)
正如它所说:a + b
的结果是int
,但您希望它是char
。要将其转换为 compile ,您只需使用:
var res = reverse.Aggregate((a,b)=>(char) (a+b));
......但我认为这不会做你想要的。
我建议您不要使用LINQ开头:
private string Reverse(string strValue)
{
char[] chArray = strValue.ToCharArray();
Array.Reverse(chArray);
return new string(chArray);
}
请注意,此 无法正常使用组合字符,代理对等等。
如果您真的想使用LINQ,可以使用:
private string Reverse(string strValue)
{
return new string(strValue.Reverse().ToArray());
}
无需致电Aggregate
。如果确实想让它变慢并且使用字符串连接Aggregate
(它将是O(n 2 )),你可以这样做:
private string Reverse(string strValue)
{
return strValue.Reverse().Aggregate("", (str, c) => str + c);
}
这里我们提供了一个字符串种子值,因此参数str
将是一个字符串,+
将是字符串连接,而不是字符添加。
您可以使用StringBuilder
提高效率:
private string Reverse(string strValue)
{
return strValue.Reverse()
.Aggregate(new StringBuilder(), (sb, c) => sb.Append(c))
.ToString();
}
......但我仍然不确定它是否值得...
答案 1 :(得分:2)
您必须使用另一个Aggregate重载来使用种子值指定返回类型字符串:
var res = reverse.Aggregate("", (a, b) => a + b);