2011-08-26 37 views
0

试图扭转一个字符串,但得到错误的聚合函数不能隐在使用聚合扩展方法

private string Reverse(string strValue) 
     { 

      char[] chArray = strValue.ToCharArray(); 
      var reverse = chArray.Reverse(); 

      var res = reverse.Aggregate((a,b)=>a+b); 

      return res.ToString(); 
     } 

无法隐式转换类型“诠释”到“符”类型“诠释”转换成“字符”。存在明确的转换(你是否缺少演员?) 那么错误是什么?

+1

为什么要这样聚合它?我不明白。 – BoltClock

回答

6

正如它所说: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(n )),你可以做这样的:

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(); 
} 

...但我仍然不知道它是值得的......

+0

然后我们不能用这里的聚合来合并字符串 – learner123

+3

@ learner123:你可以,但你为什么想? –

+0

我喜欢你的StringBuilder和Aggregate方法。 – Adarsha

2

你必须用骨料的另一个重载指定通过使用种子值的返回类型字符串:

var res = reverse.Aggregate("", (a, b) => a + b);