2011-08-26 14 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);