Я хочу сделать общий преобразователь строки в числовой и предоставить его как расширение строки, поэтому я написал следующий код:
public static bool TryParse<T>( this string text, out T result, IFormatProvider formatProvider ) where T : struct
try
{
result = (T)Convert.ChangeType( text, typeof( T ), formatProvider );
return true;
}
catch(...
Я называю это так:
int value;
var ok = "123".TryParse(out value, NumberFormatInfo.CurrentInfo)
Работает нормально, пока я не хочу использовать разделитель групп:
Так как я живу во Франции, где разделитель тысяч - это пробел, а разделитель десятичных знаков - запятая, строка «1 234 567,89» должна быть равна 1234567,89 (в инвариантной культуре). Но функция вылетает!
При попытке выполнить неуниверсальное преобразование, например double.Parse(...),
, я могу использовать перегрузку, которая принимает параметр NumberStyles. Я указываю NumberStyles.Number, и на этот раз он работает!
Итак, вопросы:
- Почему синтаксический анализ не учитывает мой NumberFormatInfo (где NumberGroupSeparator хорошо указан для пробела, как я указал в моей ОС)
- Как я могу заставить работать универсальную версию с Convert.ChangeTime, поскольку она не перегружена, принимая параметр NumberStyles?