在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
类中没有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