Не уверен, что это лучшее решение, но, возможно, вы могли бы положиться на набор известных «пользовательских» числовых форматов. Например, вы можете объявить два пользовательских числовых формата (с нуля или на основе известного формата), таких как:
private static readonly NumberFormatInfo DecimalSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ".", NumberGroupSeparator = "," };
private static readonly NumberFormatInfo CommaSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ",", NumberGroupSeparator = "." };
А затем попробуйте выполнить синтаксический анализ числа через известные вам принятые форматы:
if (!Single.TryParse(unparsedValue, NumberStyles.Float, DecimalSeparatorFormat, out parsedValue) && !Single.TryParse(unparsedValue, NumberStyles.Float, CommaSeparatorFormat, out parsedValue))
throw new FormatException("Number format not supported");
Это предполагает, что у вас есть ограниченное количество известных форматов, если ваши входные данные действительно могут быть в любой культуре, то вам может не повезти с поиском отличного решения.
Единственный выигрыш этого подхода в том, что вы, по крайней мере, явно указали форматы, которые вы можете поддерживать, вместо того, чтобы полагаться на простую замену строки (которая может привести к неверному формату).