Чтобы добавить к вопросу Стивена, а не рассуждать по-другому, важно знать, почему десятичный разделитель .
.
Если это потому, что источник находится в машиночитаемом формате, в котором десятичный разделитель периода указан как часть спецификации документа, то я бы поступил точно так же, как Стивен при использовании CultureInfo.InvariantCulture
.
Если это вводимые человеком данные в определенной локали, то вы захотите сопоставить эту локаль с CultureInfo
, подходящим для этой локали, в противном случае, если программное обеспечение используется с другой локалью, у вас возникнет точно противоположная проблема. Как правило, вы хотите установить CurrentCulture
потока, чтобы соответствовать этому (CurrentCulture
для форматов, CurrentUICulture
для языков). Если вы сделали это, то вам вообще не нужно передавать культуру, так как форма float.Parse(string)
использует эту культуру - однако вы можете использовать float.Parse(string, CurrentCulture)
, чтобы явно указать, что это то, что вы делаете (и заткнуть некоторый анализ программного обеспечения, который жалуется, если вы не конкретизируете таким образом).
Что действительно сложно, так это то, что вам, возможно, придется принять и точку, и запятую - не в последнюю очередь потому, что многие культуры, использующие точку в качестве десятичного разделителя, используют запятую в качестве разделителя тысяч, и в конечном итоге невозможно гарантировать однозначный анализ. Однако если допустить, что проблема с тысячами не влияет на вас, то код, который вы дали в своем вопросе, является подходом, хотя я бы рекомендовал сделать обратное (заменить запятую на точку), а затем выполнить синтаксический анализ с инвариантной культурой, поскольку это удаляет любые дальнейшие осложнения, вызванные еще большим изменением культуры.