不能隐式转换类型'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'。存在显式转换(您是否缺少强制类型转换?)那么错误是什么呢?

不能隐式转换类型'int'& # 39; char # 39;而使用聚合扩展方法

正如它所说: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);