在String.Revirse之后,ToString中出现错误

本文关键字:错误 ToString String Revirse 之后 | 更新日期: 2023-09-27 18:25:45

当应用程序运行时,IDE会自动告诉我输入字符串的格式不正确。

(Convert.ToInt32(_subStr.Reverse().ToString().Substring(4, _subStr.Length - 4))*1.6).ToString() 

我不知道Reverse()是怎么在这里使用的。

在String.Revirse之后,ToString中出现错误

String类中没有Reverse方法,所以您使用的方法实际上是Enumerable.Reverse扩展方法。这是因为String实现了IEnumerable<char>,但结果不是字符串,而是IEnumerable<char>的另一个实现。当你调用ToString()时,你会得到:System.Linq.Enumerable+<ReverseIterator>d__a0 1[System.Char]`.

如果你想把这个IEnumerable<char>转换成字符串,你可以这样点:

string reversed = new string(_subStr.Reverse().ToArray());
(Convert.ToInt32(reversed.Substring(4, _subStr.Length - 4))*1.6).ToString()

但是,请注意,这不是反转字符串的正确方法,在某些情况下,由于Unicode代理项对和组合字符,它会失败。请参阅此处和此处了解解释。

由于Reverse方法是IEnumerable<T>的扩展,因此您会得到一个IEnumerable<T>,并且由于它没有覆盖ToString方法,因此您将从Object类获得原始实现,该类只返回对象的类型名。把IEnumerable<T>变成一个数组,然后你就可以从中创建一个字符串

你应该先得到字符串中的数字部分,然后反转它。这样,无论字符串的其余部分有什么字符,它都会起作用。尽管使用Reverse扩展不能正确地反转任何字符串(正如Thomas Levsque所指出的),但它可以用于只有数字的字符串:

(
  Int32.Parse(
    new String(_subStr.SubString(0, _subStr.Length - 4).Reverse().ToArray())
  ) * 1.6
).ToString();

最简单的方法是:

string backwards = "sdrawkcab";
string reverse = "";
for(int i = backwards.Length-1; i >= 0; i--)
     reverse += backwards[i];

结果是:reverse=";向后";。

那么你可以做:

reverse = (Convert.ToInt32(reverse) * 1.6).toString();

如果在文本行中循环,您的管道方法string.Substring().Split().Last()...将很快导致内存瓶颈。

同样重要的是要注意:字符串是不可变的,因此在for循环的每次迭代中,由于+=运算符,我们都会在内存中创建一个新的字符串实例,与其他更高效的算法相比,这将降低最佳内存效率,这是一种O(n2)算法。

要获得更高效的实现,您可以检查:https://stackoverflow.com/a/1009707/14473033