Как Int32.Parse() точно анализирует строку?

Я новичок в изучении С#. Я знаю основные понятия этого языка. Пересматривая концепции, я наткнулся на одну проблему: как именно работает Int32.Parse()?

Теперь я знаю, что он делает, и вывод, и перегрузки. Что мне нужно, так это точный способ, которым выполняется этот синтаксический анализ.

Я искал на сайте MSDN. Он дает очень обобщенное определение этого метода (преобразует строковое представление числа в его эквивалент 32-битного целого числа со знаком). Итак, мой вопрос: как он преобразует строку в 32-битное целое число со знаком?

Читая дальше, я узнал 2 вещи -

  1. Строковый параметр интерпретируется с помощью перечисления "NumberStyles".
  2. Строковый параметр форматируется и анализируется с помощью класса «NumberFormatInfo».

Мне нужна теория, стоящая за этой концепцией. Также я не понял термина - "информация, специфичная для культуры" из определения класса NumberFormatInfo.


person Gaurang    schedule 01.01.2013    source источник
comment
Вы можете использовать такой инструмент, как ILSpy, чтобы разобрать двоичные файлы .NET и посмотреть, как они состоят.   -  person Matthew    schedule 01.01.2013
comment
@TheodorosChatzigiannakis: я обязательно погуглю, но не могли бы вы объяснить метод синтаксического анализа, используемый для этого конкретного синтаксического анализатора, если это возможно?   -  person Gaurang    schedule 01.01.2013


Ответы (2)


Вот соответствующий код, который вы можете просмотреть в соответствии с условиями < href="http://referencesource.microsoft.com/license.html" rel="nofollow">MS-RSL.

person Theodoros Chatzigiannakis    schedule 01.01.2013
comment
Большое усилие!!! Давайте вместе попробуем систематически разобрать метод. Теперь, возвращаясь к основному вопросу, как метод понимает, какое числовое значение представляет цифровой символ? - person Gaurang; 02.01.2013
comment
Он просто вычитает из него '0'. Подумайте об этом: мы знаем, что '0' != 0 и что '5' != 5. Но '0' и '5' по-прежнему являются числами, поэтому с ними можно выполнять математические операции. И, поскольку '0', '1', '2' и т. д. идут подряд, гарантируется, что '5' - '0' == 5. - person Theodoros Chatzigiannakis; 02.01.2013

«Информация о культуре» относится к способам записи чисел в разных культурах. Например, в США вы можете написать 1 миллион как:

1,000,000

Но в других культурах в качестве десятичного разделителя используется запятая, поэтому вы можете увидеть

1'000'000

or:

1 000 000

или, конечно (в любой культуре):

1000000
person Matt Burland    schedule 01.01.2013
comment
также позволяет преобразовывать странные языки чисел, такие как арабский msdn.microsoft.com/en-us /библиотека/xbtzcc4w.aspx - person Nahum; 01.01.2013