不能隐式转换类型'int'& # 39; char # 39;而使用聚合扩展方法
本文关键字:方法 扩展 char 转换 int 不能 类型 | 更新日期: 2023-09-27 18:06:55
尝试反转字符串,但在聚合函数中得到错误
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'。存在显式转换(您是否缺少强制类型转换?)那么错误是什么呢?
正如它所说:a + b
的结果是int
,但您希望它是char
。要使它编译成,只需使用:
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(n2)),你可以这样做:
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();
}
…但我还是不确定是否值得……
您必须使用另一个聚合重载来通过使用种子值指定返回类型字符串:
var res = reverse.Aggregate("", (a, b) => a + b);