После String.Reverse в ToString возникает ошибка - PullRequest
2 голосов
/ 26 февраля 2012

Когда приложение запускается, IDE сообщает мне, что входная строка не в правильном формате.

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

Я не знаю, как Reverse() может быть использован здесь точно.

Ответы [ 2 ]

8 голосов
/ 26 февраля 2012

В классе 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 и объединения символов. См. здесь и там для объяснений.

1 голос
/ 26 февраля 2012

Поскольку метод Reverse является расширением IEnumerable<T>, вы получите IEnumerable<T> в качестве результата, и, поскольку он не переопределяет метод ToString, вы получите исходную реализацию из Objectкласс, который просто возвращает имя типа объекта.Превратите IEnumerable<T> в массив, затем вы можете создать из него строку.

Сначала вы должны получить часть строки, которая является цифрами, а затем перевернуть ее.Таким образом, он будет работать независимо от того, какие символы находятся в остальной части строки.Хотя использование расширения Reverse не работает должным образом для переворачивания любой строки (как указал Томас Левеск), оно будет работать для строки только с цифрами:

(
  Int32.Parse(
    new String(_subStr.SubString(0, _subStr.Length - 4).Reverse().ToArray())
  ) * 1.6
).ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...