错误是
'string.String(char[])' 的最佳重载方法匹配有一些无效参数
我的代码:
string reverseValue = new string(
value.Select((c, index) => new { c, index })
.OrderByDescending(x => x.index).ToArray());
char[] chars = value.ToCharArray();
Array.Reverse(chars);
new String(chars);
或者(有点慢)
new String(value.Reverse().ToArray());
请注意,这不会处理 UTF32 代理对,也不会组合字符。
您正在选择一个新对象,而不是字符。尝试这个:
string reverseValue = new string(
value.Select((c, idx) => new {
charVal = c,
index = idx
})
.OrderByDescending(x => x.index)
.Select(x => x.charVal)
.ToArray());
假设这不仅仅是学术上的,我可以建议:
/// <summary>
/// Reverses a string
/// </summary>
public static string ReverseString(this string s)
{
char[] arr = s.ToCharArray();
Array.Reverse(arr);
return new string(arr);
}
用法:
string reverseValue = value.ReverseString();
您忘记选择字符:
string reverseValue = new string(
value.Select((c, index) => new { c, index })
.OrderByDescending(x => x.index)
.Select(x => x.c)
.ToArray()
);
另请注意,这是一种非常低效的反转字符串的方法。您可以使用Array.Reverse
或者如果您真的关心性能:
public static string Reverse(string input)
{
var length = input.Length;
var last = length - 1;
var chars = input.ToCharArray();
for (int i = 0; i < length / 2; i++)
{
var c = chars[i];
chars[i] = chars[last - i];
chars[last - i] = c;
}
return new string(chars);
}
你为什么不做类似的事情:
string r = new string( s.Reverse().ToArray() ) ;
或(因为已经采用 Reverse() )是这样的:
public static class StringHelpers
{
public static string ToReverse( this string s )
{
char[] buf = new char[s.Length] ;
int i = 0 ;
int j = s.Length ;
while ( j > 0 )
{
buf[i++] = s[--j] ;
}
return new string(buf) ;
}
}
它不是 LINQ,但我敢打赌在这种情况下它的性能比 LINQ 更好。